2016-04-26 22 views
1

时抛出的错误我有以下标题Python的netaddr中打空CSV细胞

City State Zip Latitude Longitude Subnet Wired1 Wired2 Wireless1 Wireless2 Domain Name NAT_DHCP NAT_Wireless 

当一个IP搜索,我的两个无线头,以及有线头之间寻找一个静态的CSV文件。

if (addr >= wired1 and addr <= wired2) or (addr >= wireless1 and addr <= wireless2): 
print all header fields. 

现在有些条目缺少无线范围和/或缺少有线范围。我得到以下错误:

netaddr.core.AddrFormatError: failed to detect a valid IP address from '' 

更具体的无线头:

File "script.py", line 175, in myfile 
wireless1 = (int(IPAddress(row['Wireless1']))) 

现在,我使用Dictreader和文档,是不是应该跳过空行?是否有另一种方法可以用来跳过线条?

with open('csvfiles/myfile.csv', 'rb') as incsv: 
    reader = csv.DictReader(incsv, delimiter=',') 

这里是我的变量,如果好奇:

addr = (int(IPAddress(ip))) 
wired1 = (int(IPAddress(row['Wired1']))) 
wired2 = (int(IPAddress(row['Wired2']))) 
wireless1 = (int(IPAddress(row['Wireless1']))) 
wireless2 = (int(IPAddress(row['Wireless2']))) 

例CSV行:

Wired1  Wired2   Wireless1  Wireless2 
10.65.0.0 10.65.239.255 10.65.240.1 10.65.255.254 
10.38.0.0 10.38.239.255  
10.34.0.0 10.34.239.255 10.34.240.1 10.34.255.254 
10.83.0.0 10.83.239.255 
+0

你可以添加几行你正在阅读的csv文件吗? – Abbas

+0

增加了范围,但出于安全原因,我保留了所有其他信息。 –

+0

在无法显示实际值的地方添加虚拟值,将很容易重现您的问题并为您提供帮助。 – Abbas

回答

1

考虑使用pandas,你可以操纵你的csv文件好多了。

import pandas as pd

df = pd.read_csv('your_file.csv')

#See how does your data looks like in pandas 
print df 

     Wired1   Wired2 Wireless1  Wireless2 
0 10.65.0.0 10.65.239.255 10.65.240.1 10.65.255.254 
1 10.38.0.0 10.38.239.255   NaN   NaN 
2 10.34.0.0 10.34.239.255 10.34.240.1 10.34.255.254 
3 10.83.0.0 10.83.239.255   NaN   NaN 

#Select only the rows where 'Wireless1' is not null 
df[pd.notnull(df['Wireless1'])] 
     Wired1   Wired2 Wireless1  Wireless2 
0 10.65.0.0 10.65.239.255 10.65.240.1 10.65.255.254 
2 10.34.0.0 10.34.239.255 10.34.240.1 10.34.255.254 

#Select only 'Wireless' clolumn where it is not null 
df[pd.notnull(df['Wireless1'])]['Wireless1'] 
0 10.65.240.1 
2 10.34.240.1 
Name: Wireless1, dtype: object 

同样可以用大熊猫做更多的操作。因此,您可以避免将空值传递给netaddr