этот код предназначен для запроса каталога, затем списка 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"
Да, поэтому вам нужно добавить код из моего комментария. Проблема заключается в том, что 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