python - 合并两个用冒号分隔的文件
问题描述
我有两个用冒号分隔的文件,内容如下
File1: param1:param2
File2: param2:param3
我想生成File3: param1:param3
合并两个输入文件,因为 param2 对它们来说很常见。
我写了两个 for 循环来实现这一点,但我认为对于较大的文件来说效率不够高。
编辑:根据用户的要求,这是我用 for 循环编写的代码,其中 file1 和 file2 包含本文描述中提到的字面行
#!/usr/bin/env python
# -*- coding: utf-8 -*-
delimiter=':'
file1='file1.txt'
file2='file2.txt'
with open(file1) as file1data:
f1data = dict(map(str, line.split(delimiter, 1)) for line in file1data if delimiter in line)
with open(file2) as file2data:
f2data = dict(map(str, line.split(delimiter, 1)) for line in file2data if delimiter in line)
# print('f1data: {}'.format(f1data))
# print('f2data: {}'.format(f2data))
for a in f1data:
# print('f1data[a]: {}'.format(f1data[a]))
# print('a: {}'.format(a))
if f1data[a] in f2data:
# print('f2data[f1data[a]]: {}'.format(f2data[f1data[a]]))
print('{}{}{}'.format(a, delimiter, f2data[f1data[a]]))
file1data.close()
file2data.close()
解决方案
让我们考虑一下这个问题没有单一的解决方案。
作为建议,它可以使用哈希图(dict
在 python 中)来实现。
为了提高内存效率,在内存中保留更少的键,您可以构建一个 dict 映射最短文件。
例如,假设 File1 较短。
file_1_map = dict()
with open('File1', 'r') as fp:
for line in fp:
param1, param2 = line.split(':')
file_1_map[param2] = param1
现在,您有一个file_1_map
映射param2 -> param1
。
接下来,您遍历第二个文件,并且对于每一行,您查找对应param1
的param2
第二个文件。
with open('File2', 'r') as fp:
for line in fp:
param2, param3 = line.split(':')
param1 = file_1_map[param2]
# Here, you can write the output for the target file.
print(f"{param1}:{param3}")
推荐阅读
- mysql - 未使用 HQL 映射的两个表的内部联接
- html - 整页但包含背景颜色
- c++ - 奇怪的 condition_variable::wait_for 行为
- javascript - React.js 如何在路由文件中注册多个路由
- bash - 将文件的内容循环到参数
- r - R:par(cex.lab=2) 在 plot(effect(),…) 中不起作用
- cakephp - How to add field value on RulesChecker message
- java - XOR Neural Net converges to 0.5
- java - 如何在android上将kotlin转换为java?
- excel - 如何将PETREL中的地震属性导出为excel格式?