我有两个格式如下的文本文件:
每一行的第一个是:
Key1:Value1
第二个是这样的:
Key2:Value2
有没有一种方法可以将 file1
中的 Value1
替换为 Value2
并将其用作 file2< 中的键
?
例如:
文件1:
foo:hello
bar:world
文件2:
hello:adam
bar:eve
我想得到:
foo:adam
bar:eve
这两个文件不一定在每一行都匹配。这可以用 awk 或其他东西巧妙地完成,还是我应该用 Python 天真地完成?
最佳答案
创建两个字典,每个文件一个。例如:
file1 = {}
for line in open('file1', 'r'):
k, v = line.strip().split(':')
file1[k] = v
或者如果您更喜欢单线:
file1 = dict(l.strip().split(':') for l in open('file1', 'r'))
然后你可以这样做:
result = {}
for key, value in file1.iteritems():
if value in file2:
result[key] = file2[value]
另一种方法是您可以为 file1 反向生成键值对并使用集合。例如,如果您的 file1 包含 foo:bar
,则您的 file1 dict 为 {bar: foo}
。
for key in set(file1) & set(file2):
result[file1[key]] = file2[key]
基本上,您可以使用集合交集快速找到公共(public)元素,因此这些元素保证在 file2 中,您不会浪费时间检查它们是否存在。
编辑:正如@pepr 所指出的,如果顺序对您很重要,您可以将collections.OrderedDict
用于第一种方法。
关于python - 两个文件的文本处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10460088/