Проблемы с моим первым проектом переименования имен файлов

#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 для совместного переименования нескольких файлов, хотя это может занять больше времени.

Надеюсь, это поможет!
Счастливого кодирования