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

如何在Python中基于字典重命名多个文件?,python,list,dictionary,rename,Python,List,Dictionary,Rename,我的文件如下所示: file_name_unique_123.pdf file_name_unique_456.pdf file_name_unique_789.pdf 我根据一个csv文件创建了一个字典,该文件有多个列,其中一个包含文件的唯一ID,如“unique\u 123”等: list = csv.DictReader(open('file.csv'), delimiter = ';') for row in list: print(row) 现在我有一句话: {'ID':

我的文件如下所示:

file_name_unique_123.pdf
file_name_unique_456.pdf
file_name_unique_789.pdf
我根据一个csv文件创建了一个字典,该文件有多个列,其中一个包含文件的唯一ID,如“unique\u 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匹配,并根据属于该记录的列重命名文件。 例子: 文件名\u unique\u 123.pdf应根据字典中的第一条记录重命名为one\u 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)

文件名是否总是在fomat
文件名\u unique\u xxx.pdf中?是的,它们总是在该格式中。然后在id列表中循环并调用os.replace(“文件名”+id+.pdf”,dst]是的,我知道,但我不知道具体怎么做。我不知道如何从dict中获取正确的数据。你能提供一点代码来帮助我开始吗?谢谢。如果csv包含两行相同ID的行,我想跳过第二行怎么办?另一个问题是它基于字典,所以如果其中有一条记录不作为文件存在,则会发生错误。我需要循环文件,因为文件比记录少。@Pepzi I已更新答案。请告诉我它是否适用于您。不幸的是,它不适用。在以“new_name”开头的行中会出现“KeyError:”ID“”,因为我需要“ID”在您键入“name”的地方。我一直在尝试使用“name”来解决此问题,就像您所做的那样,最后一行导致“系统找不到指定的路径:”错误,后面列出了很多文件名。我想这是因为如果不在文件名中使用ID,某些文件的名称将是相同的。有什么想法吗?@Pepszi I帮不了你多少忙。你必须检查我们是否不使用
ID
,然后多个文件将重命名为同一文件?如果你想使用
ID
代替
na我
然后我可以更新答案。