[英]Compare specific fields in two files -Python
我想比较具有不同列的两个文件(file1和file2),但是共有前4列,输出应该是file1中存在的file2行:
文件1:
132.227.127.170 49163 173.194.40.110 443
132.227.127.170 49164 31.13.86.65 443
132.227.127.170 49165 193.51.224.40 443
132.227.127.170 49166 193.51.224.40 443
132.227.127.170 49167 193.51.224.40 443
......
文件2:
132.227.127.170 49155 17.172.232.150 5223 3 4500.1587 106
132.227.127.170 49155 17.172.232.150 5223 3 8100.3275 106
132.227.127.170 49163 173.194.40.110 443 5 0.405 53
132.227.127.170 49164 31.13.86.65 443 7 0.018600000000000002 53
132.227.127.170 49165 193.51.224.40 443 417 42.5117 32362
132.227.127.170 49166 193.51.224.40 443 34 33.382 1236
132.227.127.170 49167 193.51.224.40 443 8 37.067099999999996 458
132.227.127.170 49168 193.51.224.40 443 5 0.0008 53
132.227.127.170 49169 193.51.224.40 443 5 0.0009 53
132.227.127.170 49170 31.13.86.65 443 937 30.7529 117540
......
输出:
132.227.127.170 49163 173.194.40.110 443 5 0.405 53
132.227.127.170 49164 31.13.86.65 443 7 0.018600000000000002 53
132.227.127.170 49165 193.51.224.40 443 417 42.5117 32362
132.227.127.170 49166 193.51.224.40 443 34 33.382 1236
132.227.127.170 49167 193.51.224.40 443 8 37.067099999999996 458
....
所以我尝试了这段代码,它通常可以正常工作,在其他情况下我已经尝试过了,并且运行良好,但是我不知道这次出了什么问题!
import string
tstFile1=open("output","w+")
with open('file1') as file1, open('file2') as file2:
myf=[line.strip().split() for line in file1]
f1=[line.strip() for line in filter(lambda x: x.strip().split()[0:3] in myf, file2)]
for i in f1:
tstFile1.write("%s\n" %i)
tstFile1.close()
那你建议我改变什么呢? 任何帮助,我试图使用AWK命令,但仍然是同样的问题
问题是您试图太花哨了。 一个步骤太多,因此您很容易错过一些小细节。
file1包含4列,但是您仅从file2中提取前3列。
如果更改以下行,您的问题将得到解决:
f1=[line.strip() for line in filter(lambda x: x.strip().split()[0:4] in myf, file2)]
和
f2=[line.strip() for line in filter(lambda x: x.strip().split()[0:4] not in myf, file2)]
将[0:3]更改为[0:4](请记住python索引位于元素之间 )
但是,请拆分此逻辑,这将使调试更加容易!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.