使用Python比较CSV匹配行

2024-04-20 07:21:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个csv,每个csv只包含一列:

littleListIPs.csv:

10.187.172.140
10.187.172.141
10.187.172.142
10.187.172.143
10.187.172.144
10.187.172.145
10.187.172.154
10.187.172.155

(...)

-

BigListIPs.csv:

10.187.172.146
10.187.172.147
10.187.172.148
10.187.172.149
10.187.172.150
10.187.172.151
10.187.172.152
10.187.172.153
10.187.172.154
10.187.172.155

(...)

我需要一个脚本,将比较他们,并创建第三个文件(输出.csv),包含littleListIPs.csv文件,以及确认该IP是否存在于BigListIPs.csv文件文件,如以下输出(您可以放置“;”而不是“|”):

10.187.172.140 | Not present in BigListIPs.csv
10.187.172.141 | Not present in BigListIPs.csv
10.187.172.142 | Not present in BigListIPs.csv
10.187.172.143 | Not present in BigListIPs.csv
10.187.172.144 | Not present in BigListIPs.csv
10.187.172.145 | Not present in BigListIPs.csv
10.187.172.154 | Present in BigListIPs.csv
10.187.172.155 | Present in BigListIPs.csv

我在Stack(Python: Comparing two CSV files and searching for similar items)中看到了一个类似的情况,但是我不能很好地处理它以满足我的需要,即使是一个更简单的情况。谢谢你的帮助。你知道吗


Tags: 文件csvinip脚本stacknot情况
2条回答

您只需使用in检查IP是否在BigList中,然后写入第三个文件

littlelistIPs = ['10.187.172.140', '10.187.172.141', '10.187.172.142', '10.187.172.143',
                '10.187.172.144', '10.187.172.145', '10.187.172.154', '10.187.172.155']

biglistIPs = ['10.187.172.146', '10.187.172.147', '10.187.172.148', '10.187.172.149',
              '10.187.172.150', '10.187.172.151', '10.187.172.152', '10.187.172.153',
              '10.187.172.154', '10.187.172.155']

with open('output.csv', 'w') as f:
    for i in littlelistIPs:
        if i in biglistIPs:
            f.write(i + ' | present in BigListIPs.csv\n')
        else:
            f.write(i + ' | Not present in BigListIPs.csv\n')

是用Python2.x写的,因为这是我手头的东西。你知道吗

  • 将BigIp列表加载到一个集合中。检查in数组是O(n),检查in集合是O(1)。你知道吗
  • 使用with打开文件,这是一种很好的做法,可以确保文件已正确关闭。你知道吗

代码:

#!/usr/bin/env python

import csv

little_ip_filename = "littleListIPs.csv"
big_ip_filename = "BigListIPs.csv"
output_filename = "results.csv"

# Load all the entries from BigListIPs into a set for quick lookup.
big_ips = set()

with open(big_ip_filename, 'r') as f:
    big_ip = csv.reader(f)
    for csv_row in big_ip:
        big_ips.add(csv_row[0])

# print big_ips

with open(little_ip_filename, 'r') as input_file, open(output_filename, 'w') as output_file:
    input_csv = csv.reader(input_file)
    output_csv = csv.writer(output_file)
    for csv_row in input_csv:
        ip = csv_row[0]
        status = "Present" if ip in big_ips else "Not Present"
        output_csv.writerow([ip, status + " in BigListIPs.csv"])

你知道吗littleListIPs.csv文件地址:

10.187.172.140
10.187.172.141
10.187.172.142
10.187.172.143
10.187.172.144
10.187.172.145
10.187.172.154
10.187.172.155

你知道吗BigListIPs.csv文件地址:

10.187.172.146
10.187.172.147
10.187.172.148
10.187.172.149
10.187.172.150
10.187.172.151
10.187.172.152
10.187.172.153
10.187.172.154
10.187.172.155

你知道吗结果.csv地址:

10.187.172.140,Not Present in BigListIPs.csv
10.187.172.141,Not Present in BigListIPs.csv
10.187.172.142,Not Present in BigListIPs.csv
10.187.172.143,Not Present in BigListIPs.csv
10.187.172.144,Not Present in BigListIPs.csv
10.187.172.145,Not Present in BigListIPs.csv
10.187.172.154,Present in BigListIPs.csv
10.187.172.155,Present in BigListIPs.csv

相关问题 更多 >