Переименование имен файлов с использованием Python - PullRequest
1 голос
/ 23 августа 2011

Мне нужно просто добавить слово "_Manual" в конец всех файлов, которые у меня есть в определенном каталоге. Вот скрипт, который я сейчас использую - у меня нет опыта работы с python, поэтому этот скрипт является откровеннымдругие скрипты, которые у меня лежали!

Он не выдает сообщений об ошибках, но также не работает ..

folder = "C:\Documents and Settings\DuffA\Bureaublad\test"

import os, glob

for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1])
        filename_zero = filename_split[0]
        os.rename(filename_zero, filename_zero + "_manual")

Я сейчас использую

folder = "C:\Documents and Settings\DuffA\Bureaublad\test"
import os # glob is unnecessary
for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        fullpath = os.path.join(root, filename)
        filename_split = os.path.splitext(fullpath) # filename and extensionname (extension in [1])
        filename_zero, fileext = filename_split
        print fullpath, filename_zero + "_manual" + fileext
        os.rename(fullpath, filename_zero + "_manual" + fileext)

но он все еще не работает .. он ничего не печатает и ничего не меняется в папке!

Ответы [ 4 ]

5 голосов
/ 23 августа 2011

os.rename требуется имя файла источника и назначения. Переменная filename содержит ваше текущее имя файла (например, "thing.txt "), тогда как ваш разделитель разделяет его на something и txt. В качестве исходного файла для переименования вы затем указываете только something, что молча завершается неудачей.

Вместо этого вы хотите переименовать файл, указанный в filename, но, переходя и в подпапки, вы должны обязательно использовать абсолютный путь. Для этого вы можете использовать os.path.join(root, filename).

Итак, в итоге вы получите что-то вроде этого:

os.rename(os.path.join(root, filename), 
  os.path.join(root, filename_zero + "_manual" + filename_split[1]))

Это переименует dir1/something.txt в dir1/something_manual.txt.

4 голосов
/ 23 августа 2011
folder = r"C:\Documents and Settings\DuffA\Bureaublad\test"

import os, glob

for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1])
        filename_zero = filename_split[0]
        os.rename(os.path.join(root, filename), os.path.join(root, filename_zero + "_manual" + filename_split[1]))

В вашем коде вы пытаетесь переименовать filename_zero, который является именем файла без расширения и поэтому не существует как реальный путь. Вы должны указать полный путь к os.rename, как указано выше.

3 голосов
/ 23 августа 2011

I. е. это ничего не делает? Посмотрим:

folder = "C:\Documents and Settings\DuffA\Bureaublad\test"

import os # glob is unnecessary

for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        fullpath = os.path.join(root, filename)
        filename_split = os.path.splitext(fullpath) # filename and extensionname (extension in [1])
        filename_zero, fileext = filename_split
        os.rename(fullpath, filename_zero + "_manual" + fileext)

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


РЕДАКТИРОВАТЬ, чтобы поместить изменения в более заметное место:

Вы тоже, кажется, ошиблись в своем пути.

Используйте

folder = r"C:\Documents and Settings\DuffA\Bureaublad\test"

для предотвращения превращения \t в символ табуляции.

0 голосов
/ 23 августа 2011
for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        os.rename(os.path.join(root,filename),
                  os.path.join(root,'%s_manual%s' % os.path.splitext(filename)))

Вы должны добавить элемент управления в свой код, чтобы убедиться, что имя файла для переименования еще не содержит _manual в строковом имени

...