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

Python比对多个abc开头txt与test.txt 输出匹配行及文件名

Python实现方法

你原来用os.system("ls abc*.txt")的方式拿不到实际的文件名列表,os.system只会返回命令的执行退出状态码,不会捕获命令输出的内容,直接用Python标准库glob做文件名匹配更可靠,不依赖系统shell,跨Windows/macOS/Linux都能正常运行。

完整实现逻辑分三步:

  • 先读取基准文件test.txt的所有有效行,存到集合里,集合比对的效率比列表高很多
  • 匹配所有符合abc*.txt规则的文件,支持递归查找子目录
  • 逐个读取匹配到的文件内容,找出和test.txt共有的行,按要求格式输出

完整可运行代码:

import glob

# 读取基准文件test.txt的内容,存入集合
test_content = set()
with open("test.txt", "r", encoding="utf-8") as f:
    for line in f:
        # 移除行尾换行符,跳过无意义空行
        clean_line = line.rstrip("\r\n")
        if clean_line:
            test_content.add(clean_line)

# 匹配所有abc开头的txt文件,若要递归查找子目录就把参数换成 "**/abc*.txt", recursive=True
for txt_file in glob.glob("abc*.txt"):
    common = []
    with open(txt_file, "r", encoding="utf-8") as f:
        for line in f:
            clean_line = line.rstrip("\r\n")
            if clean_line and clean_line in test_content:
                common.append(clean_line)
    # 存在匹配内容时按格式输出
    if common:
        print(f"filename: {txt_file}")
        for line in common:
            print(f"common: {line}")
        # 不同文件的输出结果之间空一行
        print()

可选调整说明

  • 如果需要递归遍历所有子目录下的目标文件,把glob那行改成glob.glob("**/abc*.txt", recursive=True)即可
  • 如果你的文件是GBK等其他编码,把open函数里的encoding参数改成对应编码值就行
  • 当前逻辑是整行完全匹配,如果需要做关键词模糊匹配,替换对应的行判断逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:39:26