python - 两个文件的文本处理

标签 python text awk

我有两个格式如下的文本文件:

每一行的第一个是:

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/

相关文章:

python - Python 中静态方法的语法是如何选择的?

python - Python2.7中在带有空格和逗号的字符串后创建一个新行

python - Kprototype 算法元组索引超出范围

javascript - 是否可以更改作为文本元素克隆的 svg use 元素的 textContent 值?

bash - 按年求和并用 0 插入缺失的条目

python - 是否可以使用 webbrowser 或 Selenium 来获取浏览器中的当前 URL

c++ - 如何显示文本中n个字母的单词数? C++

php - 另一个棘手的 preg_match

Awk - 再次使用特定行来匹配模式

PHP 'exec' 命令不能与 'awk' 命令一起正常工作