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

Python如何读取两个文件夹文件并避免重复

如何读取多文件夹SQL文件并优先保留后文件夹的同名文件?

嘿,针对你这个需求,我们可以调整代码逻辑,先把优先级高的folder2文件处理完,再处理folder1里那些folder2没有的文件,这样就能实现“folder2有同名文件就跳过folder1”的规则啦。

先明确你的需求场景:

有两个文件夹:folder1(包含-1.sql、-2.sql、-3.sql)和folder2(包含-2.sql),需要读取所有SQL文件,但如果folder2里存在某文件,就不读取folder1里的同名文件。

原来的代码只能处理单个文件夹,我们可以这么修改:

import os

# 定义两个文件夹路径
folder1 = '../folder1/'
folder2 = '../folder2/'

# 第一步:先收集folder2里所有SQL文件的文件名(不带路径),用集合存方便快速查找
folder2_files = set()
for filename in os.listdir(folder2):
    # 只处理.sql文件,同时跳过子文件夹
    if filename.endswith('.sql') and os.path.isfile(os.path.join(folder2, filename)):
        folder2_files.add(filename)

# 第二步:处理folder2的所有SQL文件,把内容存到对应变量里
for filename in folder2_files:
    file_path = os.path.join(folder2, filename)
    with open(file_path, 'r') as myfile:
        data = myfile.read()
    query_name = filename.replace(".sql", "")
    exec(f"{query_name} = data")

# 第三步:处理folder1里的文件,只处理那些folder2没有的SQL文件
for filename in os.listdir(folder1):
    file_path = os.path.join(folder1, filename)
    # 跳过子文件夹,且只处理.sql文件,同时该文件不在folder2的文件列表里
    if os.path.isdir(file_path) or not filename.endswith('.sql'):
        continue
    if filename not in folder2_files:
        with open(file_path, 'r') as myfile:
            data = myfile.read()
        query_name = filename.replace(".sql", "")
        exec(f"{query_name} = data")

代码逻辑解释:

  • 先用集合folder2_files存储folder2里的所有SQL文件名,集合的查找速度比列表快很多,适合做存在性判断
  • 先处理folder2的文件,确保同名文件优先保留folder2的内容
  • 处理folder1时,先过滤掉子文件夹和非SQL文件,再判断文件名是否不在folder2_files里,只有符合条件的才读取并创建变量
  • 用os.path.join拼接路径,比直接字符串拼接更安全,能避免不同系统路径分隔符的问题

另外提个小提醒:exec函数如果处理不可信的文件名可能有安全风险,但如果是你自己管理的文件夹和文件名,就不用担心这个问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:34:58