【问题标题】:Reading accented filenames in R using list.files使用 list.files 在 R 中读取重音文件名
【发布时间】:2017-11-06 07:27:09
【问题描述】:

我正在为每个州读取提供here 的县 geojson 文件到 R Studio(R 3.1,Windows 8)中。我在 R 中使用list.files() 函数。

对于州 PR,该州有许多带有重音(西班牙语)名称的县,即。 Bayamón.geo.json,Añasco.geo.json。函数list.files() 返回文件名的缩写形式,如 An~asco.geo.json、Bayamo´n.geo.json。

在下一步中,我尝试使用上述文件名读取实际文件。我收到这些文件不存在的错误消息。

我使用的是系统默认编码 ISO-8859-1,也尝试将其更改为 UTF-8,但没有成功。

请帮我解决这个问题。如何读取带有重音文件名的文件?

【问题讨论】:

  • 您尝试的代码到底是什么样的?该代码是否适用于非重音文件名?你在运行windows吗? reproducible example 会很有帮助。
  • @MrFlick 我认为 OP 列出了他的整个代码。它是list.files()。为了重现该问题,您需要创建一个名称包含重音符号的文件。我只是创建了一个新的文本文件并将其命名为 `Bayamón.txt. I get the poster's bad result. BTW dir()` 有同样的问题。
  • @G5W 什么操作系统和R版本?您使用什么编码来获取重音字符?
  • 我在 Windows,R 版本 3.2.2 下执行此操作。我从帖子中删除了名称Bayamón 并将其粘贴为文件名。我认为这意味着 UTF-8 编码。顺便说一句,在 Windows 资源管理器窗口中,名称显示正确。
  • 这个问题还没有解决。

标签: json r gis filenames non-ascii-characters


【解决方案1】:

我遇到了同样的问题,我猜这是因为我计算机上的默认系统语言与我想要转换的文件名不同(例如系统语言 = 英语,文件名 = 用法语编写)。最后,下面的代码帮助我更改了文件名。

FILENAME_OLD 是原始文件的完整路径,例如"C:/directory/file.wav"

FILENAME_NEW 是新文件名的完整路径,例如"C:/directory/file_new.wav"

######### 用非英文字符更改文件名
path = "C:/directory"
setwd(path)

test_old <- Sys.glob('C:/directory/*')
test_new <- gsub("FILENAME_OLD",
                 "FILENAME_NEW", test_old)

file.rename(test_old, test_new)

【讨论】:

    【解决方案2】:

    解决方案 1

    使用Sys.glob() 代替 list.files()

    例如,如果您将 USA 作为您的工作目录,您可以键入:Sys.glob(paths="./PR/*") 以获取“PR”文件夹中文件的完整列表(带重音符号)。

    如果要检查所有工作目录文件夹中的所有文件,可以键入:

    Sys.glob(paths=paste0(list.dirs(),"/*"))
    

    在此代码中,list.dirs() 用于获取文件夹列表。 paste0(list.dirs(),"/*") 只是将“/*”附加到每个文件夹路径,因此函数 Sys.glob 将递归列出每个文件夹和子文件夹中的文件。

    解决方案 2

    如果 文件夹 有重音符号,它将不起作用。那么我会推荐使用包fs。在这个包中,函数dir_ls() 应该可以工作。您需要安装 fs 包(install.packages("fs") 并使用library(fs) 加载它),然后以下代码应该可以工作:

    dir_ls(recurse=TRUE)
    

    recurse=TRUE 选项允许您列出子文件夹中的文件。

    fs 包的文档:

    https://cran.r-project.org/web/packages/fs/vignettes/function-comparisons.html

    https://fs.r-lib.org/

    dir_ls 函数的文档: https://www.rdocumentation.org/packages/fs/versions/1.5.0/topics/dir_ls

    【讨论】:

      猜你喜欢
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 2014-11-08
      • 2021-07-08
      相关资源
      最近更新 更多