0
我想重命名並將數字添加到從YouTube下載的一堆課文件中。但是,它們的順序是錯誤的。我有一個列表,列出了所有正確的名字,並按照他們應該觀看的順序排列。批量重命名文件;排序哈希的問題
所以我的想法是採取這個清單,使用密鑰將它們排除在外,這些密鑰稍後將用作文件的編號,並且該值將是實際的文件名。之後,我將按鍵對我的散列進行排序,並遍歷我的目錄並重命名目錄中包含的所有文件。
我有以下代碼現在:
1 #!/usr/bin/ruby
2
3 counter = 0
4
5 folder_path = "SOME_PATH"
6 names = Hash.new
7
8 file = File.new("names.txt", "r")
9 while (line = file.gets)
10 #puts "#{counter}: #{line}"
11 names[sprintf '%03d', counter] = line
12 counter += 1
13 end
14 file.close
15
16 puts "======== Names before sorting: \n ========"
17 puts names
18
19 names.keys.sort
20
21 puts "======== Names after sorting: \n ========"
22 puts names
23
24
25
26 new_filename = ""
27 counter = 0
28 Dir.glob(folder_path + "/*").each do |f|
29 #puts "#{counter}: #{File.basename(f, File.extname(f))}"
30 numbering = (sprintf '%03d', counter)
31 new_filename = numbering + " - " + names[numbering]
32
33 File.rename(f, folder_path + "/" + new_filename + File.extname(f))
34 counter += 1
35 end
36
37 puts "Renaming complete."
的問題是,現在我的哈希真的不排序。我認爲這是因爲我的關鍵值實際上是字符串而不是數字,但是如何才能實現重命名的前導零?
重命名過程本身也不太有效。這似乎爲第一對夫婦的視頻工作,但後來我得到了以下錯誤消息:
main.rb:33:in `rename': No such file or directory - PATH - .mp4 or PATH - - Dot and Cross Product Comparison/Intuition (Errno::ENOENT)
編輯:
哇,是我不好。我沒有檢查names.txt。它實際上有一個正斜槓的名字。因此,導致上述錯誤信息。
我做了排序「names.index(names.values.sort [計數器])」
它是如何可能的,這行工作的 - 名[sprintf的「%03D」,計數器] =行,你爲什麼有方形的第二個參數括號? – megas 2012-02-25 09:46:31
這是不可能的?這是我分配前導零號碼的部分。 – cherrun 2012-02-25 10:05:24
對不起,它是sprintf的參數,我沒有認出它 – megas 2012-02-25 10:07:46