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

如何按ID合并两个换行分隔的大型磁盘TXT文件?

按ID合并两个TXT文件的解决方案

问题场景

输入的两个TXT文件内容如下:

1.txt:
Adam 1234
John 4321

2.txt:
Anderson 4321
Smith 1234

需要实现按相同ID合并,预期输出:

Adam Smith 1234
John Anderson 4321

现有代码的问题

你当前的嵌套循环写法存在两个关键问题:

  1. 第二个文件fp_last_name的读取指针在第一次外层循环后就走到了文件末尾,后续外层循环无法再读取到内容,导致只能匹配第一行
  2. 通过line1[-5:]截取ID的方式不够健壮,一旦ID长度变化(比如变成5位),代码就会出错

正确实现方案

我们可以先把其中一个文件的内容按ID存入字典,再遍历另一个文件进行匹配,这样既能解决指针问题,又能提升匹配效率:

# 先把第二个文件的内容转成ID到名字的字典
id_to_last_name = {}
with open('2.txt', 'r') as fp_last_name:
    for line in fp_last_name:
        # 拆分每行的名字和ID,strip()去掉换行符和空格
        parts = line.strip().split()
        if len(parts) != 2:
            continue  # 跳过格式不正确的行
        last_name, user_id = parts
        id_to_last_name[user_id] = last_name

# 遍历第一个文件,匹配ID并写入结果
with open('full.txt', 'w') as new_file:
    with open('1.txt', 'r') as fp_first_name:
        for line in fp_first_name:
            parts = line.strip().split()
            if len(parts) != 2:
                continue
            first_name, user_id = parts
            # 检查当前ID是否在字典中存在
            if user_id in id_to_last_name:
                # 合并名字和ID,写入结果文件
                new_file.write(f"{first_name} {id_to_last_name[user_id]} {user_id}\n")

方案优势

  • 字典的查找操作是O(1)时间复杂度,比嵌套循环的O(n²)效率高很多,文件越大优势越明显
  • 通过split()拆分每行内容,不管ID是几位都能正确提取,适配更多场景
  • 分开处理两个文件,避免了文件指针位置导致的读取异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:01:16