我尝试迭代目录下的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
现在我希望取代基于S273
、S357
等的数据帧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