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
相关产品推荐
相关产品推荐

