Как удалить все пробелы в нескольких именах файлов?

Я новичок в Python. Я конвертирую файлы журнала evtx в xml, однако в именах некоторых файлов evtx есть пробелы, и я получаю сообщение об ошибке, когда начинается преобразование файла. Одно из решений - вручную удалить все пробелы из имен файлов evtx, но это невозможно при работе с большим количеством файлов.

Мне нужно удалить все пробелы из имен файлов в нескольких каталогах. Я пытаюсь переименовать файлы, удалив пробел с помощью .replace(" ",""), но все равно получаю сообщение об ошибке:

FileNotFoundError: [Errno 2] No such file or directory:

Код:

dir_path = '/home/user/evtx_logs'

for dirpath, dirnames, filenames in os.walk(dir_path):
    for f in filenames:
        new_filename = f.replace(" ","")
        os.rename(f,new_filename)

Есть ли другая альтернатива переименованию или игнорированию пробелов в имени файла?


person Melany    schedule 27.02.2021    source источник


Ответы (2)


Попробуйте распечатать значения вашего обхода каталога. Вы заметите, что имена файлов - это не пути, а просто имена файлов. Когда вы пытаетесь переименовать файл, вам нужно указать свою функцию на весь путь. Что-то вроде этого:

for dirpath, dirnames, filenames in os.walk(dir_path):
    for f in filenames:
        filepath = os.path.join(dirpath, f)
        new_filename = f.replace(" ","")
        new_filepath = os.path.join(dirpath, new_filename)
        os.rename(filepath, new_filepath)
person BlivetWidget    schedule 27.02.2021

решение

dir_path = '/home/user/evtx_logs' 

for dirpath, dirnames, filenames in os.walk(dir_path):
    for f in filenames:
        new_filename = f.replace(" ","")
        os.rename(os.path.join(dirpath, f), os.path.join(dirpath, new_filename))

вам необходимо указать full path на os.rename, чтобы переименование работало.

здесь

os.path.join(dirpath, new_filename)

dirpath или dirnames, точно не знаю:

os.path.join(dirnames, new_filename)
person alexzander    schedule 27.02.2021