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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:32:37