Модуль python os не переименовывает файл, даже если файл существует — os.rename(src, dst)

Я пытаюсь переименовать файлы из каталога. Но по какой-то неизвестной мне причине файлы не переименовываются.

Код:


def extract_info_from_filename(file_name):
    parts = file_name.split('Z')
    part1 = parts[0]
    part2 = parts[1]
    
    return part1, part2

def find_csv_files_to_rename(directory):
    for root, dirs, files in os.walk(directory):
        if 'rename' in root:
            for file_name in files:
                if file_name.endswith('.csv'):
                    original_file_path = root + '/' + file_name
                    print(f"File Name: {file_name}, Extracted Info: {extract_info_from_filename(file_name)}")
                    extracted_parts = extract_info_from_filename(file_name)
                    new_file_name = f"{extracted_parts[0]}Z_treatment{extracted_parts[1]}"
                    print(f"New File name: {new_file_name}")
                    #new_file_path = os.path.join(root,new_file_name)
                    new_file_path =root+'/'+new_file_name
                    print(f"New File Path Exists: {os.path.exists(new_file_path)}")
                    print(f"Original File Path Exists: {os.path.exists(original_file_path)}")
                    print(f"Root: {root}")
                    print(f"New file path: {new_file_path}")
                    if not os.path.exists(new_file_path):        
                        os.rename(original_file_path, new_file_path)
                        if os.rename(original_file_path, new_file_path):
                            print(f'Renamed: {file_name} -> {new_file_name} \n')
                    else:
                        print(f'File already exists: {original_file_path} \n')


root_directory = 'input_files'
find_csv_files_to_rename(root_directory)

Выход:

File Name: 2023-07-08T00_28_04_750Z_Aachen_01.01.2022-P06.2023.csv, Extracted Info: ('2023-07-08T00_28_04_750', '_Aachen_01.01.2022-P06.2023.csv')
New File name: 2023-07-08T00_28_04_750Z_treatment_Aachen_01.01.2022-P06.2023.csv
New File Path Exists: False
Original File Path Exists: False
Root: input_files\rename_and_validate\XXXX\year=2023\month=07\day=08\XXXX
New file path: input_files\rename_and_validate\XXXX\year=2023\month=07\day=08\XXXX/2023-07-08T00_28_04_750Z_treatment_Aachen_01.01.2022-P06.2023.csv

Ошибка:

FileNotFoundError: [WinError 3] The system cannot find the path specified: 'input_files\\rename_and_validate\\XXXX\\year=2023\\month=07\\day=08\\XXXX/2023-07-08T00_28_04_750Z_Aachen_01.01.2022-P06.2023.csv' -> 'input_files\\rename_and_validate\\XXXX\\year=2023\\month=07\\day=08\\XXXX/2023-07-08T00_28_04_750Z_treatment_Aachen_01.01.2022-P06.2023.csv'

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

у вас есть линия os.rename(original_file_path, new_file_path) дважды. Один раз один, один раз в своем «если». После первого переименования второе должно завершиться неудачей, поскольку файл уже переименован. Попробуйте удалить отдельную строку

FlyingTeller 16.04.2024 11:26

Я это сделал. Все та же проблема.

srinivas muralidharan 16.04.2024 11:28

Довольно любопытно, это как-то связано с именем файла и его размером?

srinivas muralidharan 16.04.2024 11:28

Является ли XXXX в пути буквальным или это что-то длиннее?

FlyingTeller 16.04.2024 11:32

Я бы не сказал, что очень долго. Но что-то вроде = «Имя папки дополнительно 2 или 3 слова»

srinivas muralidharan 16.04.2024 11:33
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
114
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ответ был неверным. Автор нашел другое решение The issue is resolved: It was about enabling LongPath in my windows through regedit

Имя файла: 2023-07-08T00_28_04_750Z_Aachen_01.01.2022-P06.2023.csv, Извлеченная информация: ('2023-07-08T00_28_04_750', '_Aachen_01.01.2022-P06.2023.csv') Новое имя файла: 2 023-07-08T00_28_04_750Z_treatment_Aachen_01 .01.2022-P06.202‌​3.csv Существует новый путь к файлу: False Существующий исходный путь к файлу: False Это результат, который я получаю на основе вашего кода. Могут ли быть еще сценарии, почему это не удается? Технически это должно работать.

srinivas muralidharan 16.04.2024 11:44

Предоставьте полный журнал, включая print(f"Root: {root}") print(f"Новый путь к файлу: {new_file_path}")

Ivan Sharapenkov 16.04.2024 11:49

Проблема решена: речь шла о включении LongPath в моих окнах через regedit.

srinivas muralidharan 16.04.2024 11:55

Другие вопросы по теме