【发布时间】:2022-01-13 15:32:42
【问题描述】:
这可能是重复的,但我在其他帖子上没有找到答案,所以我会在这里发布。我在重命名带有重音符号(法语)的文件时遇到问题。我的目标是删除所有文件中的所有重音,然后用适当的名称重命名它们。我认为问题来自file.list()。例如,当我列出一个名为“désolé”的文件时,它将被列为“de´sole´”。但令人惊讶的是,我仍然可以用 str_replace_all() 将“e´”替换为“é”。当我最终尝试重命名文件时,问题就来了。我什至无法访问该文件,因为我的路径未正确读取,因为我从文件列表中获取更改的名称,我无法选择文件,因此无法重命名它。这是代码:
library(stringr)
Path <- "G:/qgis/Batiment_PDF_MACRO/Batiments_Communaux/Bex/"
list <- list.files(path=Path)
for (i in 1:length(list)) {
pattern <- c("é", "è", "ê", "ë", "à", "â", "ä", "î", "ï", "ö", "ô", "û", "ü", "ù", "ç")
if (str_contains(list[i], pattern, logic = "OR") == TRUE) {
filename <- paste0(Path, list[i])
name <- str_replace_all(list[i], "é", "e")
name <- str_replace_all(name, "è", "e")
name <- str_replace_all(name, "ê", "e")
name <- str_replace_all(name, "ë", "e")
name <- str_replace_all(name, "à", "a")
name <- str_replace_all(name, "â", "a")
name <- str_replace_all(name, "ä", "a")
name <- str_replace_all(name, "ï", "i")
name <- str_replace_all(name, "î", "i")
name <- str_replace_all(name, "ö", "o")
name <- str_replace_all(name, "ô", "o")
name <- str_replace_all(name, "û", "u")
name <- str_replace_all(name, "ü", "u")
name <- str_replace_all(name, "ù", "u")
name <- str_replace_all(name, "ç", "c")
newfilename <-paste0(Path, name)
file.rename(filename, newfilename)
}
}
我试图改变编码和东西,但没有成功......
[编辑] 实际上我认为我的文件夹名称是用奇怪的字符写的,或者我不知道。例如,我刚刚注意到某些字母(例如“â”)没有被替换,我尝试了所有这些:
name <- str_replace_all(name, "â", "a")
name <- str_replace_all(name, "a^", "a")
name <- str_replace_all(name, "^", "")
但没有任何工作,但如果我设置自己
name <- "château"
这里的输出是成功的“城堡”,这意味着我的文件夹名称有点奇怪。该文件夹也是使用 R 使用 dir.create() 函数创建的,名称来自最初在苹果计算机 (mac) 中命名的图片名称,我拥有一台 pc,也许问题来自那里?
[EDIT OF EDIT] 我在这个网站 (https://unicodelookup.com/) 上查看了我的文件夹名称由哪些实际字符组成,这很奇怪。如果你或我在这个网站上输入“é”,你会得到这个:“é:拉丁小写字母 e,带有锐音” 但是当我从我的文件夹中复制粘贴“é”时,会发生这种情况:“e:拉丁小写字母 e”+“´:组合重音”。这意味着我的文件夹名称中的 é 与正常的 é 不同,list.files() 函数可能会将这些奇怪的 é 转换为正常的 é,因此我再也找不到正确的路径了。
【问题讨论】:
-
也许你可以用 unicode 替换字符串。例如,“é”在 unicode 中写为“\u00e9”。你可以在这里找到其他的compart.com/fr/unicode/U+00E9
-
@但是问题不是出在替换上,而是找到原来的路径名。似乎 list.files() 在重命名文件时没有给出 R 想要的确切文件名......