我有一个看起来像这样的文件:
TTITLE0=track name 1
TTITLE1=track name 2
以及包含track01.cdda.wav.mp3
和track02.cdda.wav.mp3
我有以下代码,它创建了 2 个不同的数组,1 个包含轨道名称,1 个包含轨道标题:
tracks = Dir.glob("*.mp3")
tracknames = Array.new
File.open('read').each do |line|
if line =~ /TTITLE/
tracknames << line.split("=")[1].strip!
end
end
这给了我 2 个数组:
["track name 1", "track name 2"]
和
["track01.cdda.wav.mp3", "track02.cdda.wav.mp3"]
我想用第一个数组的元素重命名第二个数组中的文件。所以,"track01.cdda.wav.mp3"
会变成 "track name 1.mp3"
。
这是我到目前为止尝试过的:
tracks.map {|track| File.rename("#{tracks}", "#{tracknames}.mp3") }
我得到了错误:
No such file or directory - track01.cdda.wav.mp3track02.cdda.wav.mp3 or track name 1track name 2 (Errno::ENOENT)
我必须记住,将来每个数组中可能有任意数量的元素,但数量将彼此相等。
有什么想法吗?
最佳答案
使用Array#zip
:
tracks.zip(tracknames).each do |track, trackname|
File.rename track, "#{trackname}.mp3"
end
或者(不太有趣,但不会在枚举之前创建中间数组):
tracks.each_with_index do |track, i|
File.rename track, "#{tracknames[i]}.mp3"
end
关于ruby 用不同数组的元素重命名数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6543689/