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

如何用itertools遍历文件列表?批量提取文件奇数行方案咨询

嘿,你的单文件提取奇数行的代码已经很靠谱了!要扩展到批量处理100个同类文件的话,我们只需要加上文件批量遍历的逻辑就行,给你整理了完整的可落地方案:

批量提取多个文件的奇数行

核心思路

我们可以用Python的glob模块来批量匹配所有目标文件(比如所有.txt或.log文件),然后循环复用你原来的奇数行提取逻辑,每个输入文件对应生成一个独立的输出文件(避免内容覆盖)。

完整代码实现

import sys
import itertools
import glob

# -------------------------- 配置区域 --------------------------
# 这里设置要匹配的文件模式,支持通配符
# 示例:当前目录所有txt文件 -> "*.txt"
# 示例:data文件夹下所有log文件 -> "./data/*.log"
# 示例:所有子目录的txt文件 -> "**/*.txt"(会自动开启递归匹配)
FILE_PATTERN = "*.txt"
# 输出文件的后缀,比如原文件test.txt -> test_odd.txt
OUTPUT_SUFFIX = "_odd"
# -------------------------------------------------------------

# 获取所有匹配的文件列表,自动判断是否需要递归子目录
input_files = glob.glob(FILE_PATTERN, recursive="**" in FILE_PATTERN)

if not input_files:
    print("⚠️ 没有找到匹配的文件,请检查FILE_PATTERN是否正确")
    sys.exit(1)

# 循环处理每个文件
for idx, filename in enumerate(input_files, 1):
    # 生成安全的输出文件名,处理带多个扩展名或无扩展名的文件
    try:
        name_part, ext_part = filename.rsplit('.', 1)
        output_filename = f"{name_part}{OUTPUT_SUFFIX}.{ext_part}"
    except ValueError:
        # 处理无扩展名的文件,比如"README" -> "README_odd"
        output_filename = f"{filename}{OUTPUT_SUFFIX}"
    
    # 复用你原来的奇数行提取逻辑(内存友好,不会一次性加载所有行)
    with open(filename, 'r', encoding='utf-8') as f:
        # itertools.islice(迭代器, 起始索引, 结束, 步长):从第0行开始每2行取一次,对应原文件的奇数行(第1、3、5...行)
        odd_lines = itertools.islice(f, 0, None, 2)
        content = ''.join(odd_lines)
    
    # 写入输出文件(用'w'模式覆盖,若需要追加可改成'a+',但批量处理推荐覆盖)
    with open(output_filename, 'w', encoding='utf-8') as out_f:
        out_f.write(content)
    
    print(f"✅ 已处理 {idx}/{len(input_files)}: {filename} -> {output_filename}")

print("\n🎉 所有文件处理完成!")

关键细节说明

  • 灵活匹配文件:
    • 用*.txt匹配当前目录所有TXT文件;
    • 用**/*.txt可以匹配所有子目录下的TXT文件;
    • 如果不想用通配符,也可以把input_files改成sys.argv[1:],这样运行时手动传入多个文件名:python batch_odd.py file1.txt file2.txt ...
  • 输出命名安全:用rsplit('.',1)分割文件名和扩展名,避免像my.file.txt这种多扩展名文件出问题;还兼容了无扩展名的文件;
  • 内存友好:itertools.islice不会一次性把整个文件加载到内存,适合处理超大文件;
  • 编码处理:加上encoding='utf-8'避免不同编码的文件出现乱码问题(如果你的文件是GBK等其他编码,改成对应的编码即可)。

运行方式

  1. 把代码保存为batch_odd_lines.py;
  2. 修改FILE_PATTERN为你的目标文件模式;
  3. 在终端运行:python batch_odd_lines.py;
  4. 等待处理完成,每个输入文件都会生成带_odd后缀的输出文件。

内容的提问来源于stack exchange,提问作者Izzat Z.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:57:58