对于Python中基于数据帧两列的路径中的循环和替换部分字符串



我尝试迭代目录下的excel文件,代码如下:

import glob
import pandas as pd
files = glob.glob('./*.xlsx')
for file_path in files:
print(file_path)

输出:

./dataS273-2021-12-09.xlsx
./dataS357-2021-12-09.xlsx
./dataS545-2021-12-09.xlsx
./dataS607-2021-12-09.xlsx

现在我希望取代基于S273S357等的数据帧df,将old_name映射到new_name:

old_name new_name
0     S273        a
1     S357        b
2     S545        c
3     S607        d
4     S281        e

如有必要,将数据帧转换为字典:name_dict = dict(zip(df.old_name, df.new_name))

预期结果会像:

./dataa-2021-12-09.xlsx
./datab-2021-12-09.xlsx
./datac-2021-12-09.xlsx
./datad-2021-12-09.xlsx

我如何在Python中实现这一点?提前表示诚挚的感谢。

编辑:

for file_path in files:
for key, value in name_dict.items():
if key in str(file_path):
new_path = file_path.replace(key, value)
print(new_path)

上面的代码是有效的,如果可能的话,欢迎分享其他解决方案。

您可以先按os.path.split拆分basename,然后按-拆分文件名的第一部分,再按dict.get拆分映射,如果不匹配,则返回相同的值,因此第二个参数也是first:

import os
name_dict = dict(zip(df.old_name, df.new_name))
print (name_dict)
{'S273': 'a', 'S357': 'b', 'S545': 'c', 'S607': 'd', 'S281': 'e'}
#for test
L = './dataS273-2021-12-09.xlsx ./dataS357-2021-12-09.xlsx ./dataS545-2021-12-09.xlsx ./dataS607-2021-12-09.xlsx' 
files = L.split()

for file_path in files:
head, tail = os.path.split(file_path)
first, last = tail.split('-', 1)
out = os.path.join(head, f'{name_dict.get(first, first)}-{last}')
print(out)

./dataa-2021-12-09.xlsx
./datab-2021-12-09.xlsx
./datac-2021-12-09.xlsx
./datad-2021-12-09.xlsx

最新更新