簡體   English   中英

比較兩個文件中的特定字段-Python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM