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

如何使用Python根据一个文件的内容提取另一个文件的匹配行

现有代码问题原因

你运行后生成空文件的核心原因是:直接将File-A的纯贷款号行和File-B的完整业务行做集合交集匹配,二者字符串内容完全不一致,自然没有匹配结果。另外if loan in source的写法也存在逻辑问题,文件对象遍历一次后指针就会移动到末尾,重复遍历不会返回任何内容。

实现思路
  • 第一步:读取File-A的所有贷款号,去除每行末尾的换行符和空白后存入set结构,利用setO(1)的查找效率提升匹配速度,哪怕两个文件均为数十万行量级也不会卡顿。
  • 第二步:逐行读取File-B,每行取第一个~分隔符前的内容作为待匹配贷款号,判断是否在第一步的贷款号集合中。
  • 第三步:将所有匹配到的File-B行直接写入结果文件,逐行读写的方式内存占用极低,不会受大文件体积限制。
可运行解决方案
import os

os.chdir('C:\\Temp\\')

# 配置对应文件名
loan_file = 'Loans.txt'
source_file = 'Orig.txt'
output_file = 'PulledLoans.txt'

# 读取所有贷款号存入set
loan_set = set()
with open(loan_file, 'r', encoding='utf-8') as f:
    for line in f:
        # 去除换行、首尾空白,过滤空行
        loan_no = line.strip()
        if loan_no:
            loan_set.add(loan_no)

# 逐行匹配并写入结果
with open(source_file, 'r', encoding='utf-8') as src_f, open(output_file, 'w', encoding='utf-8') as out_f:
    for line in src_f:
        # 仅分割1次取贷款号,减少不必要的性能消耗
        current_loan = line.split('~', 1)[0].strip()
        if current_loan in loan_set:
            out_f.write(line)

print(f"匹配完成,结果已写入{output_file}")
优化点说明
  • 用set存储贷款号,比列表查找效率高数百倍,完全适配大文件处理场景
  • 逐行读取File-B,不需要把整个文件加载到内存,哪怕File-B体积达到GB级别也能正常运行
  • 仅做单次字符串分割取贷款号,进一步降低性能损耗

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:06:03