ruby - 当所有文件都没有类型时更改 Ruby 中的文件名?

标签 ruby

我有一个目录,其中包含 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

我已确认一切正常,但线路

File.rename(f,f+".csv")

抛出错误:“在‘重命名’中:没有这样的文件或目录... (Errno::ENOENT)”

有人知道为什么这不起作用吗?

最佳答案

带有目录和文件

您可以将目录更改为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

关于ruby - 当所有文件都没有类型时更改 Ruby 中的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41421123/

相关文章:

ruby-on-rails - RubyOnRails 启动服务器运行时报错

html - 如何删除特定标签但保留允许的标签

ruby - ruby 中的短 namespace 首字母缩写词

ruby-on-rails - 部署 ruby​​ api 谷歌云

ruby - 使用 axlsx 创建 3 色条件格式

ruby-on-rails - 如何在 Rspec 中正确地进行字符串连接?

ruby - 在 Capistrano/Capifony 中替换任务

ruby - Git 提交消息的正则表达式

ruby-on-rails - rails 字段上的唯一性约束 ruby

ruby - 获得最多可参加事件列表的最佳方式