python - 循环文件并删除具有特定IP地址的行

时间:2017-11-12 23:55:52

标签: python

我是python的初学者,但是我开始了一个导入csv文件并循环浏览文件的项目,同时删除了其中包含不可路由IP地址的行。这是csv文件的一个示例:

md5                                 domain      ip
0001184ebc4a4c8c641074e7d597a373    twitter.com  104.244.42.1

这是我编译的代码,但它不起作用:

with open('orig_file', 'rb') as f, open('new_file', 'wb') as g:
    writer = csv.writer(g)
    for row in csv.reader(f):
        if row in range('192.168.1.0/24'):
            del row[]

我很有信心,如果我可以通过星号工作获得这条线路,我可以解决剩下的问题。

感谢任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

range()无法处理IP地址,仅适用于数字范围:

range(stop) -> range object
range(start, stop[, step]) -> range object

Return an object that produces a sequence of integers from start (inclusive)
to stop (exclusive) by step.  range(i, j) produces i, i+1, i+2, ..., j-1.
start defaults to 0, and stop is omitted!  range(4) produces 0, 1, 2, 3.
These are exactly the valid indices for a list of 4 elements.
When step is given, it specifies the increment (or decrement).

Python 3中的ipaddress模块(可以使用pip install ipaddress安装在Python 2中)可以完全按照您的需要执行:

In [7]: import ipaddress

In [8]: ipaddress.ip_address('1.2.3.4') in ipaddress.ip_network('192.168.1.0/24')
Out[8]: False

In [9]: ipaddress.ip_address('192.168.1.1') in ipaddress.ip_network('192.168.1.0/24')
Out[9]: True

这样的事情应该有效:

import ipaddress

with open('orig_file', 'rb') as f, open('new_file', 'wb') as g:
    writer = csv.writer(g)

    for row in csv.reader(f):
        ip = ipaddress.ip_address(row[0])

        if ip in ipaddress.ip_network('192.168.1.0/24'):
            continue

        writer.write(row)