我的目录中有5个没有文件类型的文件(也许他们的文件类型是'.txt' - 我不确定),名为“file1”,“file2”......
我正在尝试使用以下代码将它们转换为CSV格式:
require('fileutils')
folder_path = "correct_folder_path"
Dir.foreach(folder_path) do |f|
next if f == '.' || f == '..'
#confirm inputs are correct (they are)
#p f
#p f+".csv"
File.rename(f, f+".csv")
end
我已经确认f确认一切正常,但行
File.rename(f,f+".csv")
抛出错误:“在'重命名'中:没有这样的文件或目录......(Errno :: ENOENT)”
有谁知道为什么这不起作用?
答案 0 :(得分:2)
Dir.foreach
返回的路径相对于您传入的folder_path
。您对File.rename
的调用尝试重命名当前工作目录中的文件,这可能不是与folder_path
指定的目录相同的目录。
您可以通过在文件名前添加folder_path
来使重命名成功:
f = File.join(folder_path, f)
File.rename(f, f + ".csv")
答案 1 :(得分:2)
您可以将目录更改为folder_path
。如果某些文件可能具有“.txt”扩展名,则需要首先删除扩展名,以便不获取.txt.csv
文件:
folder_path = "correct_folder_path"
Dir.chdir(folder_path) do
Dir.foreach(".") do |f|
next if File.directory?(f)
basename = File.basename(f, '.*')
new_file = basename + '.csv'
p f
p new_file
## Uncomment when you're sure f and new_file are correct :
# File.rename(f, new_file) unless f == new_file
end
end
使用Pathname,过滤和重命名文件通常要容易得多:
require 'pathname'
folder_path = "correct_folder_path"
Pathname.new(folder_path).children.each do |f|
next if f.directory?
p f
p f.sub_ext('.csv')
## Uncomment if you're sure f and subext are correct :
# f.rename(f.sub_ext('.csv'))
end
答案 2 :(得分:1)
另一种选择:
require 'pathname'
folder.children.each do |child|
# Other logic here
child.rename(child.dirname + (child.basename.to_s + '.csv'))
end