Массовое переименование файлов txt с разными частями, используя Python - PullRequest
0 голосов
/ 30 мая 2020

У меня есть список файлов, которые нужно переименовать в sh.

Квитанция AB C -001 623572349-1.txt -> Квитанция AB C -001A.txt

Квитанция AB C -001 623572349-2.txt - > Квитанция AB C -001B.txt

Однако даже на первом шаге я каждый раз получаю следующую ошибку: «Невозможно создать файл, если этот файл уже существует:». Какой будет лучший вариант для достижения вышеуказанного результата, когда файлы, заканчивающиеся на 1, станут A; заканчивающийся на 5.txt станет E.txt, а soforth?

Ниже приведен код, который я использовал:

import os, fnmatch

#Set directory of locataion; include double slash for each subfolder.
file_path = "C:\\Users\\Mr.Slowbro\\Desktop\\TBU\\"


#Set file extension accordingly
files_to_rename = fnmatch.filter(os.listdir(file_path), '*.txt')

for file_name in files_to_rename:
    file_name_new = file_name[-5:5]    
    os.rename(file_path + file_name, file_path + file_name_new)

1 Ответ

0 голосов
/ 30 мая 2020

Это должно вам помочь. Использование функции ord () возвращает точку Unicode символа. Таким образом, «a» будет 97, «b» будет 98, и т.д. c. Точно так же chr () возвращает символ этой точки Unicode. Итак, я думаю, что приведенный ниже код поможет вам с вашей проблемой.


#Set directory of locataion; include double slash for each subfolder.
file_path = "C:\\Users\\Mr.Slowbro\\Desktop\\TBU\\"


#Set file extension accordingly
files_to_rename = fnmatch.filter(os.listdir(file_path), '*.txt')

for file_name in files_to_rename:
    number = chr(int(file_name[-5]) - 1 + ord('A'))
    file_name_new = 'Receipt ABC-001' + number + '.txt'
    os.rename(file_name, file_name_new)```
...