比较文件A和B中的值的Python方法,如果A匹配,则从B打印整行

时间:2018-07-12 16:14:39

标签: python python-3.x

我有两个文本文件:

myfile1:

sports1
sports2
sports3
sports4
sports5
sports6
sports7
sports8

myfile2:

sports1  Cricket
sports2  golf
sports3  Hocky
sports4
sports5  Chess
sports6  Snooker
sports7  Foosball
sports8  Tampts

在上面的两个文件中,f myfile1中的第一列与myfile2中的第一列匹配,然后它应打印myfile2的两列。

下面的awk单行代码有效,但是我正在Python中寻找类似的代码。

awk 'NR==FNR{c[$1]++;next};c[$1]' myfile1 myfile2

2 个答案:

答案 0 :(得分:1)

如果愿意,可以使用第三方库,例如Pandas。这很可能会接近单线。

delim_whitespace=True确保Pandas使用空格分隔列,而不是常规csv中期望的,

import pandas as pd

df1 = pd.read_csv('file1.txt', header=None, names=['sport'])
df2 = pd.read_csv('file2.txt', header=None, names=['sport', 'name'],
                  delim_whitespace=True)

res = df2[df2['sport'].isin(df1['sport'].unique())]

print(res)

答案 1 :(得分:0)

作为一个选择,您可以对列表和字典进行相同的操作。考虑到this thread,您可以在理解内打开文件,这些文件将在执行后关闭。尽管执行此任务的最佳方法是使用“ with”作为上下文管理器。

f1 = [x.strip("\n") for x in open("myfile1.txt")].sort()
f2 = {x[0]: x[1] for x in [l.split() for l in open("myfile2.txt")]}
if f1 == list(f2.keys()).sort():
    [print(k, v) for k, v in f2.items()]