如何在for循环中实现「若非txt或csv文件则执行X」的逻辑?
解决多文件类型过滤的逻辑问题
嘿,你的思路完全没问题——把过滤逻辑提前确实能让代码可读性提升不少!先来说说你出错的原因:你写的if not file.endswith('.txt') or ('.csv')其实有个逻辑漏洞,('.csv')本身是一个非空字符串,在Python的布尔判断里永远会被视为True,所以这个条件等价于if True,导致所有文件都会被直接跳过,这就是问题所在。
下面给你两种正确的实现方式,都能满足「若非txt或csv则跳过,txt执行script1,csv执行script2」的需求:
方法1:利用str.endswith()的元组参数(推荐)
Python的字符串endswith()方法本身就支持传入元组来同时检查多个后缀,写法简洁高效:
import glob for file in glob.glob('*'): # 跳过所有非txt、非csv的文件/目录 if not file.endswith(('.txt', '.csv')): continue # 处理txt文件 if file.endswith('.txt'): # 在这里执行script1的逻辑 print(f"正在处理TXT文件: {file}") # 剩下的自然就是csv文件 else: # 在这里执行script2的逻辑 print(f"正在处理CSV文件: {file}")
方法2:使用逻辑与明确判断
如果你更习惯分开写判断条件,也可以用and来组合两个否定判断:
import glob for file in glob.glob('*'): # 既不是txt也不是csv?直接跳过 if not file.endswith('.txt') and not file.endswith('.csv'): continue # 后续处理逻辑和上面一致 if file.endswith('.txt'): # run script1 pass else: # run script2 pass
额外优化:确保跳过子目录
如果你的目录里有子目录,glob.glob('*')会把目录名也列出来,这时候可以加上os.path.isfile()来确保只处理文件:
import glob import os for file in glob.glob('*'): # 跳过子目录 + 非txt/csv的文件 if not os.path.isfile(file) or not file.endswith(('.txt', '.csv')): continue if file.endswith('.txt'): # run script1 pass else: # run script2 pass
这样调整后,代码结构会清晰很多,过滤逻辑放在最开头,后面只专注于处理目标文件类型~
内容的提问来源于stack exchange,提问作者cookie1986
相关产品推荐
相关产品推荐

