我有两个文本文件:
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
答案 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()]