如何按ID合并两个换行分隔的大型磁盘TXT文件?
按ID合并两个TXT文件的解决方案
问题场景
输入的两个TXT文件内容如下:
1.txt:
Adam 1234
John 43212.txt:
Anderson 4321
Smith 1234
需要实现按相同ID合并,预期输出:
Adam Smith 1234
John Anderson 4321
现有代码的问题
你当前的嵌套循环写法存在两个关键问题:
- 第二个文件
fp_last_name的读取指针在第一次外层循环后就走到了文件末尾,后续外层循环无法再读取到内容,导致只能匹配第一行 - 通过
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
相关产品推荐
相关产品推荐

