Ruby 如何针对输入文件写入文件名

Ruby 如何针对输入文件写入文件名,ruby,csv,filenames,Ruby,Csv,Filenames,我有大约100个输入文件,经过处理后生成2000多个输出文件。我试图根据输入的名称命名输出文件 Start cmd /k "G:Path\eachGeo.bat G:\Path\InputGeo\*.csv" 通过执行.bat通过cmd读取输入,并将输入存储在不同的路径中 outputfilename = 'Path\outputGeo\\' + Time.now.to_i.to_s + '_' + eachTag[45..54] + '_output.cs

我有大约100个输入文件,经过处理后生成2000多个输出文件。我试图根据输入的名称命名输出文件

Start cmd /k "G:Path\eachGeo.bat G:\Path\InputGeo\*.csv"
通过执行.bat通过cmd读取输入,并将输入存储在不同的路径中

outputfilename = 'Path\outputGeo\\' + Time.now.to_i.to_s + 
                 '_' + eachTag[45..54] + '_output.csv'
在上面的代码行中,我使用Time.now.to_I.to_s根据当前系统时间命名输出文件


但我想将当前时间从系统更改为输入文件名

通常情况下,您会这样处理,即使用诸如提取原始文件路径的相关部分:

Dir.glob("path/*.csv") do |path|
  CSV.open(path) do |csv_in|
    # ...

    out_path = "output_path/%s_%s.csv" % [
       File.basename(path, ".csv"),
       each_tag[45..54]
    ]

    CSV.open(out_path, "w") do |csv_out|
      # ...
    end
  end
end

这是一个非常简单的例子。我会避免将输出文件与输入文件放在同一个目录中,这样在第二次运行程序时,您就不会错误地再次读取它们。

使用/in路径名会容易得多,因为它不需要大量转义。另外,请尝试将变量名保持为小写,这样每个标记都应该是小写的。您还可以执行name=path/%d\u%s\u output.csv%[Time.now.to\u i,each\u tag[45..54]],这通常不会太混乱。这只是使用%速记法的sprintf表示法。谢谢,我会试试。但我想省去时间。现在。改为输入文件名。谢谢你的回答,但你应该看看我刚才提出的问题中的编辑。输入在不同的文件夹中,输出也在不同的文件夹中。我在cmd-bat文件中通过执行读取它们。这实际上是一个全新的问题。批处理文件与此有什么关系?整个程序是关于通过查询搜索来抓取web。bat从输入文件中读取输入的地理坐标并传递给查询,搜索的输出存储在另一个csv中。整个过程运作良好。但是现在搜索的地理位置超过了100个,命名输出文件成为一项挑战。因此,我尝试根据输入文件名命名输出。如果这不是一个太复杂的过程,那么最好在Ruby应用程序中进行刮取。在任何情况下,如果您有任意*.csv名称的输入文件,此模板应该可以工作。只需尝试根据实际工作的点点滴滴构建更大的解决方案。增量方法是解决重大问题的唯一方法。