Как мне рекурсивно переименовать папки и файлы в них? - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь написать скрипт для рекурсивного переименования папок и файлов в них. Часть папки будет работать, но мне пришлось запустить ее несколько раз, чтобы удалить все специальные символы (я не смог выяснить условия для цикла while, который будет работать). Тем не менее, он не переименовывает файлы в папках вообще. даже не трогать их. не выдает ошибку или что-либо еще. не уверен почему. любая помощь приветствуется. (Я знаю, что, посмотрев на мой код, вы сможете идентифицировать меня как новичка)

Пытался использовать цикл while, но условия никогда не выполнялись, поэтому он работал бесконечно, фактически не делая ничего. Цикл for будет работать, но мне нужно, чтобы он работал рекурсивно.

import os
import shutil
import fnmatch

#sets veriables and cwd
os.chdir(r"/Users/Xute/Movies/")
cwd = os.getcwd()
filename = os.listdir()
extensions = ('.png', '.jpg', '.txt', '.nfo')
print(cwd)


#prints folders and filenames, removes special characters, renames all to upper
for foldername, subfolders, filenames in os.walk(cwd):
    if '.HIDDEN' in foldername:
        continue
    if '_' in foldername:
        newfoldername = foldername.replace('_', ' ')
        os.rename(foldername, newfoldername)
    elif '.' in foldername:
        newfoldername = foldername.replace('.', ' ')
        os.rename(foldername, newfoldername)
    elif '-' in foldername:
        newfoldername = foldername.replace('-', ' ')
        os.rename(foldername, newfoldername)
    elif '[' in foldername:
        newfoldername = foldername.replace('[', '')
        os.rename(foldername, newfoldername)
    elif ']' in foldername:
        newfoldername = foldername.replace(']', '')
        os.rename(foldername, newfoldername)
    elif '(' in foldername:
        newfoldername = foldername.replace('(', '')
        os.rename(foldername, newfoldername)
    elif ')' in foldername:
        newfoldername = foldername.replace(')', '')
        os.rename(foldername, newfoldername)
    elif ')' in foldername:
        newfoldername = foldername.replace('  ', ' ')
        os.rename(foldername, newfoldername)
    elif foldername is not cwd:
        os.rename(foldername, foldername.upper())
    else:
        continue
    print('The current folder is ' + foldername)

    #removes txt, image, and info filenames, removes special characters, skips hidden filenames
    for filename in filenames:
        if filename.endswith('.txt') or filename.endswith('.jpg') or filename.endswith('.png') or filename.endswith('.nfo'):
            os.remove(foldername + r"/" + filename)
        elif filename.startswith('.'):
            continue
        elif os.path.isdir('/Users/Xute/Movies/.hidden'):
            # skip directories
            continue
        elif '_' in filename:
            newfilename = filename.replace('_', ' ')
            os.rename(filename, newfilename)
        #elif '.' in filename:
            #newfilename = filename.replace('.', ' ')
        elif '-' in filename:
            newfilename = filename.replace('-', ' ')
            os.rename(filename, newfilename)
        elif '[' in filename:
            newfilename = filename.replace('[', ' ')
            os.rename(filename, newfilename)
        elif ']' in filename:
            newfilename = filename.replace(']', ' ')
            os.rename(filename, newfilename)
        elif '(' in filename:
            newfilename = filename.replace('(', ' ')
            os.rename(filename, newfilename)
        elif ')' in filename:
            newfilename = filename.replace(')', ' ')
            os.rename(filename, newfilename)
        else:
            continue
        os.rename(filename, filename.upper())
        print(filename)

Я ожидаю, что скрипт переименует все файлы и папки с одинаковыми именами (например, удалит кучу специальных символов и так, чтобы у всех них был только заголовок)

...