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

优化多列表推导式:Python读取执行SQL文件的更优写法

优化后的Pythonic写法

针对你的需求,我们可以从路径安全处理、流程简化、避免冗余中间变量几个方向优化代码,让它更符合Python风格:

核心改进点

  • 用pathlib模块处理路径(比字符串拼接更安全、跨平台,自动处理路径分隔符)
  • 全程使用上下文管理器with,无需手动关闭文件,避免资源泄漏
  • 直接迭代文件内容,不生成多余的中间列表
  • 过滤空行,避免处理无效文件名

优化后的代码

from pathlib import Path
import mod1

# 定义路径
sql_dir = Path('/home/jupyter/SQL_scripts/')
file_list_path = '/home/jupyter/a.txt'

# 读取文件名并执行对应SQL
with open(file_list_path, 'r') as f:
    for line in f:
        filename = line.strip()  # 去除换行符和首尾空格
        if not filename:
            continue  # 跳过空行
        sql_file = sql_dir / filename  # 安全拼接路径
        sql_content = sql_file.read_text()  # 直接读取文件内容
        mod1.e_sql(sql_content)

更紧凑的版本(结合生成器)

如果想进一步精简逻辑,可以把SQL读取封装成生成器,减少临时变量:

from pathlib import Path
import mod1

def get_sql_contents(file_list_path, sql_dir):
    sql_dir = Path(sql_dir)
    with open(file_list_path, 'r') as f:
        # 用生成器表达式过滤空行并读取SQL
        yield from (
            (sql_dir / line.strip()).read_text()
            for line in f
            if line.strip()
        )

# 批量执行SQL
for sql in get_sql_contents('/home/jupyter/a.txt', '/home/jupyter/SQL_scripts/'):
    mod1.e_sql(sql)

优化说明

  • 路径安全:pathlib的/运算符自动适配不同系统的路径分隔符,避免手动拼接时的斜杠遗漏或重复问题
  • 内存高效:直接迭代文件对象(for line in f),不需要一次性把所有文件名读入内存,适合处理大的文件名列表
  • 无冗余列表:原代码中的dl、ss都是临时列表,优化后直接迭代处理,减少内存占用
  • 鲁棒性提升:通过strip()和非空判断,自动跳过空行和无效文件名

内容的提问来源于stack exchange,提问作者noodcoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:09:19