Я пытаюсь переименовать файлы из каталога. Но по какой-то неизвестной мне причине файлы не переименовываются.
Код:
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). Но похоже та же проблема.
Я это сделал. Все та же проблема.
Довольно любопытно, это как-то связано с именем файла и его размером?
Является ли XXXX в пути буквальным или это что-то длиннее?
Я бы не сказал, что очень долго. Но что-то вроде = «Имя папки дополнительно 2 или 3 слова»
Ответ был неверным. Автор нашел другое решение 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.2023.csv Существует новый путь к файлу: False Существующий исходный путь к файлу: False Это результат, который я получаю на основе вашего кода. Могут ли быть еще сценарии, почему это не удается? Технически это должно работать.
Предоставьте полный журнал, включая print(f"Root: {root}") print(f"Новый путь к файлу: {new_file_path}")
Проблема решена: речь шла о включении LongPath в моих окнах через regedit.
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
у вас есть линия
os.rename(original_file_path, new_file_path)
дважды. Один раз один, один раз в своем «если». После первого переименования второе должно завершиться неудачей, поскольку файл уже переименован. Попробуйте удалить отдельную строку