【问题标题】:How would I iterate through this collection in a Ruby-esque way我将如何以 Ruby 风格的方式遍历这个集合
【发布时间】:2011-04-03 14:40:06
【问题描述】:
puts "Renaming files..."

folder_path = "/home/papuccino1/Desktop/Test"
files = Dir.glob(folder_path + "/*").sort
extension = File.extname(files[0])
puts File.basename(files[0], extension)

puts "Renaming complete."

我的最终目标:获取文件夹中的每个文件名并将文件重命名为 Title Case:

input:                       output:
test.txt                     Text.txt
this is just a test.doc      This Is Just A Test.doc
The Final test is near.xls   The Final Test Is Near.xls

如何遍历“文件”中的每个项目?

谢谢! :)

【问题讨论】:

    标签: ruby iteration


    【解决方案1】:

    只是为了展示如何以红宝石的方式遍历文件:

    Dir.glob(folder_path + "/*").sort.each do |f|
      # do something like:
      puts File.basename(f, File.extname(f))
    end
    

    请注意,您可以使用 eachmap 方法。两者的区别在于,每个都返回你的初始集合,而 map 返回修改后的集合。

    【讨论】:

    • @Jakub:我只是在做 OP 想要的。为什么?
    • 在编辑之前,您使用.sort 进行迭代。这不是正确的方法。修改后就OK了。
    • @Jacub:啊,是的,我确实忘记在编辑之前应用每个(..):)
    【解决方案2】:

    一种典型的方式是使用each

    files.each do |file|
      p file
    end
    

    先查看文件名,然后添加重命名方法。

    【讨论】:

      【解决方案3】:
      Dir.glob( File.join(".","*") ).select{|x| test(?f,x)}.sort.each | path |
         puts File.basename(x,File.extname(x)).split("\s").map(&:capitalize).join("\s") 
      end
      

      【讨论】:

      • .select 并不完全有效。
      • @Jakub。那你有什么建议?
      • 在每个循环中进行测试。
      • 任何基准?如果你能说服我,我可能会改变答案。
      • 产量:`用户系统总实际选择0.550000 0.000000 0.550000(0.550148)无选择0.460000 0.000000 0.460000(0.460014)``
      猜你喜欢
      • 2019-12-04
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多