Я хочу переименовать и добавить числа в кучу файлов уроков, которые я загрузил с 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)
EDIT:
Ого, мой плохой. Я не проверял имя.txt. На самом деле у него было имя с косой чертой. Таким образом, вызывается указанное выше сообщение об ошибке.
я сделал сортировку с «names.index (names.values.sort [счетчик])»
Как это возможно, что эта линия работает - имена [Sprintf «% 03d», счетчик] = строка, почему у вас есть второй параметр в квадрате кронштейны? – megas
Это как-то не возможно? Это та часть, где мне присваиваются начальные нулевые числа. – cherrun
извините, это параметры для sprintf, я его не узнал – megas