从Ruby开始并尝试创建一个简单的重命名Ruby脚本。假设我有一个目录,其中包含随机文件名的简历:Resume0001,Resume0012,Resume9123,Res_430。一般来说,起始名称并不重要。
我希望我的脚本接收每个文件并重命名(或创建一个新文件),并将文件名作为简历所有者的名称。我理解这当然取决于简历布局,但是,我假设第一行只包含那个人的名字。
根据我所知,我可以通过手动输入参数(文件)来重命名它们。如果我只有5张简历可以做,那就没关系了。当我尝试向脚本提供大约10,000个简历的目录时,我的问题出现了。
这是我到目前为止所做的:
puts "Renaming files..."
Dir.glob("Resumes") do |f|
File.rename(f, f.readline())
end
puts "Renaming complete."
我有几个想法,为什么这不起作用/事情我不确定:
f
只是一个字符串,而不是文件对象,这就是readline()
无法处理它的原因。 (编辑:f == filename,而不是对实际文件对象的引用)
我也遇到私有方法错误。如果我尝试类似
的话,也会发生这种情况 first_line = f.readline()
File.rename(f, first_line)
我很难理解私有方法错误到底是什么。
我不完全确定指定目录路径的工作原理。所以,让我们说我的.rb文件位于documents\name\resume_converter\converter.rb
。如果我的简历目录也在resume_converter
文件夹(resume_converter\Resumes
)中,我会在Dir.glob("Resumes")
中指定它吗?如果它是另一个更深的文件怎么办? resume_converter\Dummy_folder\Resumes
=> Dir.glob("Dummy_folder\Resumes")
我正在尝试做什么的框架支持?我没有实用的Rails /框架知识,但我想在使用框架之前已经完成了这样的任务?
所以是的,我被卡住了。
答案 0 :(得分:0)
这样的事情应该有效:
require 'fileutils'
Dir.glob("Resumes/*").each do |f|
name = File.open(f).readlines.first.strip # Strip off any whitespace or trailing newlines
FileUtils.mv(f, "Resumes/#{name}")
end