我有两个文件的场景。文件1具有以下值
192.168.1.1/32
192.168.1.11/32
172.16.18.30/24 文件2具有以下值
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中的行顺序。
下面是我的剧本。
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())目前的产出将按顺序排列:
172.16.18.30/24 IP-2
192.168.1.1/32 XYZ是否有办法按以下顺序获得输出:
192.168.1.1/32 XYZ
172.16.18.30/24 IP-2发布于 2022-02-02 07:41:46
使用any和列表理解可以很好地处理这个问题。
>>> 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']
>>>处理不了订单。
>>> 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
>>>为避免重复:
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中的所有行。
https://stackoverflow.com/questions/70951799
复制相似问题