<p>下面是一个使用<code>csv</code>模块加载文件的示例,并使用函数测试第一个文件的IP地址是否在另一个文件的IP范围内。我不熟悉使用IP地址,但正如上面所说,<code>ipaddress</code>模块在这里可能很有用。在</p>
<pre><code>import csv
#Modify this function to check if an IP address falls within a range
def ismatch(ipadress, iprange):
return ipadress == iprange
#Load CSVs
failed = csv.DictReader(open('File1 CSV IPfailed.csv'))
ranges = csv.DictReader(open('File2 CSV IPrange.csv'))
#list for ranges, since will iterate multiple times
rangelist = [row for row in ranges]
#Add cases where FailedIP entry == IPrange entry
matches = []
for ii in failed:
for jj in rangelist:
if ismatch(ii[' FailedIP'], jj[' IPrange']):
ii.update(jj) #merge jj dict entries into ii
matches.append(ii) #add to matches
#Output
fieldnames = ranges.fieldnames + failed.fieldnames #list of all field names
with open('IPmatches.csv', 'w') as f_out:
writer = csv.DictWriter(f_out, fieldnames)
writer.writeheader()
writer.writerows(matches)
</code></pre>
<p>需要注意的一点是,字段名以空格开头,因为CSV文件头中的每个字段之间都有一个空格。如果字段名在CSV文件头的引号内,那么DictReader不会在前面附加这些空格。在</p>
<p>由于此脚本迭代每个失败IP地址的IP范围,因此它可能无法扩展到您的问题。与上面提到的UpAndAdam一样,简化您试图解决的问题的组件(匹配ip,使用<code>csv</code>)将有助于提供更详细的建议。在</p>