list.files() 找不到文件夹中的所有文件
Posted
技术标签:
【中文标题】list.files() 找不到文件夹中的所有文件【英文标题】:list.files() doesn't find all the files in a folder 【发布时间】:2014-09-10 12:11:52 【问题描述】:我正在尝试将一些“.xls”加载到 R 中。该文件夹包含 8 个 .XLS 文件和 8 个 .csv 文件,这些文件是我通过手动打开 .xls 文件并另存为 .csv 来制作的。我意识到我可以使用 gdata
包中的 read.xls()
直接加载 .xls 文件,这很有帮助,因为数据是以 .xls 格式接收的。但是,当我在 3 个最新的 .xls 文件中使用 list.files()
时,列表中会丢失。然而,它们相关的 .csv 文件也包括在内。如果我打开文件并将它们转换为 .xls 然后再次运行list.files()
,它们会出现,如果我在资源管理器中重命名它们,当我再次运行list.files
时它们不会出现。 Excel 文件可能来自不同地区的 Excel 版本,因为它们来自不同国家的办公室,但我不认为这会产生影响。
文件已通过电子邮件发送给我,因此作为实验,我创建了一个新文件夹并将文件从 Outlook 保存到新文件夹,运行 list.files()
时的结果是相同的,当我转换它们时也是如此。
list.files(getwd())
返回
character(0)
如果我使用list.files( getwd() )
或指定文件扩展名,这没有区别。
我想知道我缺少什么,这样我就可以避免在运行脚本时必须单独打开每个文件或冒丢失文件的风险。
抱歉这个问题无法重现。
编辑
在 Jbaum 的建议下,运行了以下代码并返回了结果
shell(sprintf('dir /b %s', normalizePath(getwd())), intern=TRUE)
[1] "'\\\\\\ **File path**'"
[2] "CMD.EXE was started with the above path as the current directory."
[3] "UNC paths are not supported. Defaulting to Windows directory."
[4] "The system cannot find the file specified."
attr(,"status")
[1] 1
Warning message:
running command 'C:\WINDOWS\system32\cmd.exe /c dir /b \\\\ **File path**' had status 1
注意:我已将文件路径替换为**文件路径**,并将反斜杠的数量增加了一倍,因此它们显示为 R
【问题讨论】:
你setwd
正确吗? getwd
是否返回预期路径?
是 getwd 返回预期的路径。重要的是要记住 files.list 返回 一些 但不是所有文件,当文件被转换时,它们会被列出,如果路径不正确,就不会发生这种情况。
list.files(all.files=TRUE)
的结果是什么?
返回相同但添加了“。”和“..”
system(sprintf('ls %s', getwd()), intern=TRUE)
怎么样? (确保getwd()
返回包含感兴趣文件的路径。)
【参考方案1】:
问题与公司 PC 的网络同步有关,实际上与 R 无关。
我正在使用的系统将所有文件从PC的C盘同步到网络驱动器,所有程序的默认设置是在PC连接到网络时查看网络驱动器上的文件。
但是,当我从 Outlook 传输文件时,它们存储在文件夹的本地实例上,而不是联网的,这使得查看网络实例的 R 看不到它们。
当我使用 Excel 转换文件时,新文件默认保存到网络,允许 R 看到它们。当系统完成同步过程时,R 最终可以访问所有文件。
以后避免此问题的一种方法是在文件不可见时进行手动同步以检查这不是问题。
【讨论】:
【参考方案2】:我遇到了同样的问题。我有 20 个文件名为:file_1、file_2、...file_20。
list.files(".", pattern, recursive=T, full.names=T, all.files=T)
没有列出所有 20 个文件,它丢失了一些文件。
我尝试使用正则表达式并列出了所有文件,这是我的做法:
list.files(".", "file_+[0-9]", recursive=T, full.names=T, all.files=T)
【讨论】:
【参考方案3】:我在我的 Mac 上使用 RStudio 时遇到了同样的问题。仅列出了目录中的一些文件。原来如果文件存储在 iCloud 中并且没有在本地下载,R 将文件视为filename.csv.icloud
并跳过它。
【讨论】:
以上是关于list.files() 找不到文件夹中的所有文件的主要内容,如果未能解决你的问题,请参考以下文章
IB 中的 Xcode 5.1 故事板文件,找不到文件所有者