0

我最近开始使用 python,因为我想在地球物理学和数据处理方面做得更好。

我从一个小项目开始重命名我的银行帐户的每月提取文件。他们有一个愚蠢的日期和名字顺序,我只想按日期排序。

其中一个文件名是AZG149882014_001_20170129

最后 8 个符号是日期,但顺序非常不直观,我的 windows 系统无法正确排序。

到目前为止,文件名更改为20170129,但没有更改日期的顺序。

它也确实显示了yy的年份。我有点失落。我知道我必须将它也放入替换功能中,但它不适用于我尝试的方式。

你能帮帮我吗?

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) 
4

1 回答 1

0

这是你想要的吗?

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一起重命名多个文件,尽管可能需要更多时间。

希望对您有所帮助!
快乐编码

于 2020-11-10T13:10:39.947 回答