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

