Python - как изменить все имена файлов на строчные и без пробелов - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь изменить все файлы в папке, чтобы они содержали некоторое единство. Например, у меня есть «Hard Hat Person01», «Hard Hat Person02» и т. Д., Но у меня также есть «hard_hat_person01» и «hardhatperson01» в одной папке.

Так что я хочу изменить все эти имена файлов в 'hardhatperson01', 'hardhatperson02' и так далее. Я попробовал коды, как показано ниже, но он продолжает показывать ошибки. Не могли бы вы помочь мне с этим?

for file in os.listdir(r'C:\Document'):
    if(file.endswith('png')):
        os.rename(file, file.lowercase())
        os.rename(file, file.strip())

Ответы [ 2 ]

3 голосов
/ 10 февраля 2020

listdir возвращает только имя файла, а не его каталог. И вы не можете переименовать файл более одного раза. Фактически, вы должны убедиться, что случайно не перезаписали существующий файл или каталог. Более надежное решение -

import os

basedir = r'C:\Document'

for name in oslistdir(basedir):
    fullname = os.path.join(basedir, name)
    if os.path.isfile(fullname):
        newname = name.replace(' ', '').lower()
        if newname != name:
            newfullname = os.path.join(basedir, newname)
            if os.path.exists(newfullname):
                print("Cannot rename " + fullname)
            else:
                os.rename(fullname, newfullname)
0 голосов
/ 10 февраля 2020

Вот решение:

  • Для проверки наличия файла
  • Избегать перезаписи
  • Проверка необходимости переименования
import os
os.chdir(r"C:\Users\xyz\Desktop\tESING")
for i in os.listdir(os.getcwd()):
    if(i.endswith('png')) and " " in i and any(j.isupper() for j in i):
        newName = i.lower().replace(" ","")
        if newName not in os.listdir(os.getcwd()):
            os.rename(i,newName)
        else:
            print("Already Exists: ",newName)
...