首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较两个文件,并按输入文件的顺序打印完全匹配。

比较两个文件,并按输入文件的顺序打印完全匹配。
EN

Stack Overflow用户
提问于 2022-02-02 07:25:33
回答 1查看 117关注 0票数 1

我有两个文件的场景。文件1具有以下值

代码语言:javascript
复制
192.168.1.1/32
192.168.1.11/32
172.16.18.30/24 

文件2具有以下值

代码语言:javascript
复制
192.168.1.1/32 XYZ
10.0.0.10/32 IP-3  
172.16.18.30/24 IP-2

我想要一个python脚本,它将根据file2检查文件1的确切值,如果该值存在于file2中,则应该显示该值。我创建了一个基本脚本,该脚本似乎工作正常,但输出是按字母顺序显示的,而不是file1中的行顺序。

下面是我的剧本。

代码语言:javascript
复制
with open("file1.txt") as f, open("file2.txt") as f2:
    src = set(map(str.rstrip,f))
    for line in f2:
        dst = line.split(None, 1)[0]
        if dst in src:
            print(line.rstrip())

目前的产出将按顺序排列:

代码语言:javascript
复制
172.16.18.30/24 IP-2 
192.168.1.1/32 XYZ

是否有办法按以下顺序获得输出:

代码语言:javascript
复制
192.168.1.1/32 XYZ
172.16.18.30/24 IP-2
EN

回答 1

Stack Overflow用户

发布于 2022-02-02 07:41:46

使用any和列表理解可以很好地处理这个问题。

代码语言:javascript
复制
>>> file1_lines = [
...   "192.168.1.1/32",
...   "192.168.1.11/32",
...   "172.16.18.30/24"
... ]
>>>
>>> file2_lines = [
...   "192.168.1.1/32 XYZ",
...   "10.0.0.10/32 IP-3",
...   "172.16.18.30/24 IP-2"
... ]
>>>
>>> [line for line in file2_lines if any(l in line for l in set(file1_lines))]
['192.168.1.1/32 XYZ', '172.16.18.30/24 IP-2']
>>>

处理不了订单。

代码语言:javascript
复制
>>> for f1_line in set(file1_lines):
...     for f2_line in file2_lines:
...         if f1_line in f2_line:
...             print(f2_line)
...
192.168.1.1/32 XYZ
172.16.18.30/24 IP-2
>>>

为避免重复:

代码语言:javascript
复制
d = []

for f2_line in file2_lines:
    found = None
    for f1_line in set(file1_lines):
        if f1_line in f2_line:
            found = f1_line
            break
    if found:
        d.append({'key': found, 'line': f2_line})
        
for f1_line in file1_lines:
    for h in d:
        if h['key'] == f1_line:
            print(h['line'])

我们将用'key'标记文件2中的每一行,这是文件1中包含的行。完成后,我们可以迭代文件1中的行,并使用它们来查找它们匹配的文件2中的所有行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70951799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档