合并两个以冒号分隔的文件

时间:2019-03-31 16:26:18

标签: 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()

1 个答案:

答案 0 :(得分:0)

让我们考虑解决这个问题的唯一方法。

作为建议,可以使用哈希图(在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}")