2015-06-07 3 views
1

У меня много опыта программирования, но это мой первый скрипт на питоне. Я пытаюсь добавить префикс «00» ко всем файлам в определенной папке. Сначала я прочитал имена всех файлов и сохранил их в массиве. Затем я сортирую массив и добавляю префикс «00», затем использую функцию os.rename, но где-то по пути я что-то испортил.Как переименовать несколько файлов с помощью python?

import sys, os 

file_list = [] 

for file in os.listdir(sys.argv[1]): 
    file_list.append(file) 

for i in file_list: 
    file_list[i] = prevName 
    newName = '00' + file_list[i] 
    os.rename(prevName, newName) 

У меня есть файл .py в папке со всеми файлами, которые я хочу переименовать. Файл .py содержит сценарий выше. Когда я дважды щелкните файл .py, CMD-окно начнет мигать и исчезнет, ​​и ни одно из имен файлов не будет изменено. Любая помощь будет оценена, извините, если это очень очевидная ошибка, мой уровень python в настоящий момент довольно n00b.

+2

Прежде всего, запустите python с консоли, а не дважды щелкните его, чтобы вы могли видеть, какое исключение оно выбрасывает. –

ответ

3

В дополнение к ответу @Padraic также вносите следующие изменения в свой код.

import sys, os 

file_list = [] 

for f in os.listdir(sys.argv[1]): 
    file_list.append(f) 

for i in range(len(file_list)): 
    prevName = file_list[i] 
    if prevName != 'stackoverflow.py': # Mention .py file so that it doesnt get renamed 
     newName = '00' + file_list[i] 
     os.rename(prevName, newName) 
+0

Благодарю вас обоих, используя оба ваших предложения, сценарий отлично работает – ErrorMaster

+0

@ErrorMaster, вам не нужно создавать какие-либо списки, вам нужен os.listdir и ничего больше, вам также нужно присоединиться к пути к файлу, если вы планируете передавать имя каталога –

1

Ваши ошибки кода, потому что вы не дают арг так sys.argv[1] бы дать IndexError, вам нужно будет вызывать сценарий с именем дир из ЦМД подскажете не дважды щелкните по нему:

python your_script directory <- argv[1] 

Или изменить код и укажите путь, вам также необходимо присоединиться к пути к имени файла.

path = "full_path" 
for f in os.listdir(path): 
    curr,new = os.path.join(path,f), os.path.join(path,"00{}".format(f)) 
    os.rename(curr,new) 

os.listdir возвращает список так просто перебирать, что вам не нужно, чтобы создать список и добавить к нему.

for i in file_list: также будет делать каждое имя i не индексом, чтобы вызвать другую ошибку, но, как указано выше, вам все равно не нужно это делать.

1
  1. Проверьте ваши отступы. Второй цикл for не имеет отступов правильно.
  2. for i in file_list: file_list[i] = prevName

    Вы не перебор правильно. for Петли в Python похожи на foreach петли, которые вы знаете из других языков программирования. i в for i in file_list на самом деле дает вам элементы в списке, так что вы должны делать for i in range(len(file_list)): file_list[i] = ......

    , хотя это не очень вещим, ни вообще хорошей идеей, чтобы изменить коллекцию, вы в настоящее время итерации.

Смежные вопросы