优化多列表推导式: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
相关产品推荐
相关产品推荐

