我是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[]
我很有信心,如果我可以通过星号工作获得这条线路,我可以解决剩下的问题。
感谢任何帮助。
谢谢。
答案 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)