2016-09-17 3 views
0

У меня возникли проблемы с пониманием того, почему мой код не работает. Я хочу, чтобы переименовать каждый файл в определенной папке в порядке, как это: Foldername_1 Foldername_2 Foldername_3 и т.д ...Петля фильтра не работает

Код я написал должен увеличить переменную «Num» на 1 каждый раз, когда он reloops для цикла.

path = os.getcwd() 
filenames = os.listdir(path) 

    for filename in filenames: 
     num = 0 
     num = num + 1 
     name = "Foldername_{}".format(num) 
     os.rename(filename, "{}".format(name)) 

Однако я получаю эту ошибку:

FileExistsError: [WinError 183] Cannot create a file when that file already exists: '90' -> 'Foldername_1'

ответ

1

Вы устанавливаете num в 0 для каждой итерации. Перемещение num = 0из цикла:

num = 0 
for filename in filenames: 
    num = num + 1 
    name = "Foldername_{}".format(num) 
    os.rename(filename, "{}".format(name)) 

Вам не нужно снова форматировать переменную name; "{}".format(name) создает ту же строку, что и в name. И вместо того, чтобы вручную увеличивать число, вы можете использовать enumerate() function для получения номера для вас:

for num, filename in enumerate(filenames, 1): 
    name = "Foldername_{}".format(num) 
    os.rename(filename, name) 

Примите во внимание, что os.listdir() не список имен в алфавитном порядке; скорее, вы получите заказ, основанный на структуре каталогов на диске, который зависит от файлов заказа, которые были созданы, и точной реализации файловой системы. Вы можете отсортировать вручную:

for num, filename in enumerate(sorted(filenames), 1): 
Смежные вопросы