如何从Excel生成目标字典并批量替换文件夹内SQL文件的指定字符串
问题1:Excel读取生成嵌套字典转平层字典
解决方案
两种实现方式可选:
方式1:调整pandas读取逻辑,直接生成平层字典
只需要读取Excel时直接取映射列后转字典即可,假设你要作为替换值的列列名为rep:
import pandas as pd # 读取后直接取rep列转字典,自动为平层结构 flat_dict = pd.read_excel(r"findrep.xls", index_col=0)['rep'].to_dict() # 额外加入你需要的'src':'rep'键值对 flat_dict['src'] = 'rep' print(flat_dict)
方式2:对已生成的嵌套字典做结构转换
如果不想修改读取代码,可以用字典推导式处理已生成的嵌套字典:
# 你原有代码生成的嵌套字典d d = {'art': {'rep': 'artist'}, 'car': {'rep': 'cart'}, 'dar': {'rep': 'dart'}} flat_dict = {k: v['rep'] for k, v in d.items()} flat_dict['src'] = 'rep' print(flat_dict)
两种方式输出的都是你需要的平层字典结构:{'src':'rep','art':'artist','car':'cart','dar':'dart'}
问题2:批量替换SQL文件报错及逻辑优化
报错原因
iteritems()是Python2的字典方法,Python3中字典直接用items()方法遍历键值对即可。
另外原有代码存在多个逻辑问题:
- 打开文件用
rU模式是只读模式,无法写入内容,且该模式在Python3已被弃用 - 文件关闭操作放在了键值对遍历的循环内,第一次遍历完成就关闭了文件,后续操作会报错
- 没有过滤SQL文件,会修改文件夹内所有类型的文件
修复后可运行的代码
import os # 替换字典用你前面生成的flat_dict即可 replacements = {'src':'rep','art':'artist','car':'cart','dar':'dart'} sql_dir = r"C:\Users\Magesh\Documents\Python Scripts\sql" for filename in os.listdir(sql_dir): # 只处理后缀为.sql的文件 if not filename.endswith('.sql'): continue file_path = os.path.join(sql_dir, filename) # 用with语句自动管理文件句柄,无需手动关闭 with open(file_path, 'r', encoding='utf-8') as f: text = f.read() # 完成所有替换逻辑后再写入文件 for src, target in replacements.items(): text = text.replace(src, target) with open(file_path, 'w', encoding='utf-8') as f: f.write(text)
内容的提问来源于stack exchange,提问作者MageshJ
相关产品推荐
相关产品推荐

