You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:00:00