如何根据输入文件命名输出文件?
How to name output file with respect to input file?
我有大约 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
根据当前系统时间命名输出文件。
我想将其更改为输入文件的名称。
通常你会像这样处理它,你使用 File.basename
之类的东西来提取原始文件路径的相关部分:
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
这是一个非常简单的例子。我会避免将输出文件与输入文件放在同一目录中,这样当您第二次 运行 程序时就不会错误地再次读取它们。
我有大约 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
根据当前系统时间命名输出文件。
我想将其更改为输入文件的名称。
通常你会像这样处理它,你使用 File.basename
之类的东西来提取原始文件路径的相关部分:
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
这是一个非常简单的例子。我会避免将输出文件与输入文件放在同一目录中,这样当您第二次 运行 程序时就不会错误地再次读取它们。