#python #windows #rename #fnmatch
#python #Windows #переименовать #fnmatch
Вопрос:
Я недавно начал с python, так как хочу стать лучше в геофизике и обработке данных.
Я начал с небольшого побочного проекта по переименованию ежемесячных файлов извлечения моего банковского счета. У них глупый порядок даты и имени, и я просто хочу упорядочить их по дате.
Одним из имен файлов будет AZG149882014_001_20170129.
Последние 8 символов — это дата, но в очень неинтуитивном порядке, когда моя система winodws не может упорядочить их должным образом.
Пока имя файла меняется на 20170129, но порядок дат не меняется.
Он также отображает год для yy вообще. Я немного потерялся. Я знаю, что я должен поместить это также в функцию replace, но это не сработает с теми способами, которые я пробовал.
Не могли бы вы мне помочь?
import os, fnmatch
file_path = 'censored path'
files_to_rename = fnmatch.filter(os.listdir(file_path), '*.pdf')
for file_name in files_to_rename:
yy = file_name[-4:-1]
mm = file_name[-6:-4]
dd = file_name[-8:-6]
date=dd '.' mm '.' yy
if fnmatch.fnmatch(file_name, '*2017*'):
new_name = os.rename(file_path file_name, file_path file_name.replace(file_name[0:17], ''))
new_name=str(new_name) str(date)
print(new_name)
Комментарии:
1. будет ли это работать, если я жестко закодирую только год, потому что предполагая, что год не станет строкой из 5 символов до 10 000 года, могу ли я просто проиндексировать год как 4 символа?
2. и еще один вопрос, если дата вместо 29 изменится на 1, будет ли это просто 1 или 01?
Ответ №1:
Это то, что вы хотите?
import os
def rename(path):
path = path
date = path.split("_")[-1] # Assuming that the date comes after underscores
yy, mm, dd = date[0:4], date[4:6], date[6:8] # Assuming that the year 10,00 will not come so fast, so considered the year as 4 character string and the month and date stays a two character string like 01, 12, 09, so on...
result = yy "." mm "." dd # String Concatenation
os.rename(path, result) # Rename the file
print(rename("DRIVE:\User\Folder\AZG149882014_001_20170129")) # Pass the location
ИЛИ более компактный и экономичный способ сделать то же самое-
import os
def rename(path):
os.rename(path, path.split("_")[-1][0:4] "." path.split("_")[-1][4:6] "." path.split("_")[-1][6:8])
rename("DRIVE:\User\Folder\AZG149882014_001_20170129")
Вы можете расширить эту идею и использовать FOR LOOPS
для совместного переименования нескольких файлов, хотя это может занять больше времени.
Надеюсь, это поможет!
Счастливого кодирования