Что не так с этим кодом Python, который должен переименовывать файлы?

1

этот код предназначен для запроса каталога, затем списка al файлов в этом каталоге, а затем переименуйте его в свою позицию в этом списке, проблема в том, что я всегда получаю ошибку 2, файл не найден, а если я печатаю список, который он, файлы, потому что список не пуст.

import os, sys    
path = input("input path: ")    
dirs = os.listdir(path)    
for i in range(0,len(dirs)):    
    os.rename(dirs[i], str(i))

Учитывая входные файлы, я хочу переименовать имя базового файла с номером, но сохраняя расширение файла. таким образом

Введите 'a.txt', 'test.txt', 'test1.txt'

Вывод "0.txt", "1.txt", "2.txt"

  • 1
    Если вы напечатали значение dirs [i], что это говорит? Я предполагаю, что вам нужен os.rename (os.path.join (path, dirs [i], str (i))), но мне лень запускать переводчика
  • 0
    говорит: ['a.txt', 'test.txt', 'test1.txt']
Теги:

1 ответ

4
Лучший ответ

Да, поэтому вам нужно добавить код из моего комментария. Проблема заключается в том, что os.listdir возвращает только имена базовых файлов, поэтому при вызове переименования он ожидает найти эти файлы в любом каталоге, на котором Python считает, что он должен быть. Добавляя os.path.join, он полностью построит квалифицированный путь к файлу, так что переименование будет работать правильно.

В комментариях OP заявила, что файлы были перемещены вверх по папке, которые заставляют меня считать, что для переименования нужен полный путь по второму аргументу. Кроме того, мы узнали, что файлы не должны быть переименованы из foo.txt в 0, а вместо этого должны стать 0.txt и т.д. (Сохранение расширения файла). Этот код теперь

import os, sys
path = input("input path: ")
dirs = os.listdir(path)
for i in range(0,len(dirs)):
   # capture the fully qualified path for the original file
   original_file = os.path.join(path, dirs[i])
   # Build the new file name as number . file extension
   # if there is no . in the file name, this code goes boom
   new_file = os.path.join(path, str(i) + '.' + original_file.split('.')[-1])

   print "Renaming {0} as {1}".format(original_file, new_file)
   os.rename(original_file, new_file)

Проверено с помощью Python 2.6.1

Отображение соответствующих бит из командной строки. Вы можете видеть пустые файлы bar.txt и foo.txt переименовываются в 0 и 1

>>> path = input("Input path")
Input path"/Users/bfellows2/so"
>>> dirs = os.listdir(path)
>>> dirs
['bar.txt', 'foo.txt']
>>> for i in range(0,len(dirs)): 
...  os.rename(os.path.join(path, dirs[i]), str(i))
... 
>>> 
[1]+  Stopped                 python
Helcaraxe:so bfellows2$ ls -al
total 0
drwxr-xr-x    4 bfellows2  bfellows2   136 Sep  3 20:30 .
drwxr-xr-x  100 bfellows2  bfellows2  3400 Sep  3 20:24 ..
-rw-r--r--    1 bfellows2  bfellows2     0 Sep  3 20:24 0
-rw-r--r--    1 bfellows2  bfellows2     0 Sep  3 20:24 1
Helcaraxe:so bfellows2$ python -V
Python 2.6.1
  • 0
    кажется, что этот код что-то делает, хотя я не знаю точно, что, так как мои файлы исчезают, когда я запускаю это ... мы не будем полностью утеряны, так как Python говорит мне, что они все еще существуют и переименовываются, отказываясь делать это снова с новыми файлами, но хорошо, я не могу получить доступ или найти переименованные файлы
  • 1
    Теперь они имеют имена 0, 1, 2 и т. Д., Как и предполагалось в вашем коде. Вы потеряли расширения файлов, поэтому Windows может «защищать» вас, скрывая этот факт.
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню