如何在Python中基于字典重命名多个文件



我的文件如下所示:

file_name_unique_123.pdf
file_name_unique_456.pdf
file_name_unique_789.pdf

我创建了一个基于csv文件的字典,该文件有多列,其中一列包含文件的唯一ID,如">unique_123"等:

list = csv.DictReader(open('file.csv'), delimiter = ';')
for row in list:
print(row)

现在我有了格言:

{'ID': 'unique_123', 'name': 'one', 'time': '1',}
{'ID': 'unique_123', 'name': 'two', 'time': '2',}
{'ID': 'unique_123', 'name': 'three', 'time': '3',}

我设法获得了文件的ID,并通过这样做列出了它们:

file_IDs = fnmatch.filter(os.listdir(folder), '*unique*.pdf')
[i.split('.', maxsplit = 1)[0].split('_', maxsplit = 5)[5] for i in file_IDs]

所以我现在有了这个输出:

['unique_123',
'unique_456',
'unique_789']

我需要做的是将文件名中的ID与字典ID相匹配,并根据属于该记录的列重命名文件。示例:应根据字典中的第一条记录将file_name_unique_123.pdf重命名为one_1.pdf

我该怎么做?提前谢谢。

使用:

for row in list:
old_name = "file_name_{}.pdf".format(row['ID'])
new_name = "{}_{}.pdf".format(row['name'], row['time'])
os.rename(old_name, new_name)

另一种方法:如果存在冗余记录

import pandas as pd
import re
df = (pd.DataFrame(csv.DictReader(open('file.csv'), delimiter = ';'))
.set_index(['ID']))
files = fnmatch.filter(os.listdir(folder), '*unique*.pdf')
for file in files:
unique_id = re.search(r'.*_(unique_[0-9]+).pdf', file).group(1)
new_name = "{}_{}.pdf".format(df.loc[unique_id, 'name'], 
df.loc[unique_id, 'time'])
os.rename(file, new_name)

最新更新