coo*_*ter 1 python csv string parsing file
这是我拥有的大型 csv 文件的一部分:
"66.35.223.128","66.35.223.143","1109647232","1109647247","AU","Australia"
"66.35.223.144","66.35.227.191","1109647248","1109648319","US","United States"
"66.35.227.192","66.35.227.207","1109648320","1109648335","JP","Japan"
"66.35.227.208","66.35.230.31","1109648336","1109648927","US","United States"
"66.35.230.32","66.35.230.47","1109648928","1109648943","AU","Australia"
"66.35.230.48","66.35.236.207","1109648944","1109650639","US","United States"
"66.35.236.208","66.35.236.223","1109650640","1109650655","AU","Australia"
"66.35.236.224","66.36.127.255","1109650656","1109688319","US","United States"
Run Code Online (Sandbox Code Playgroud)
前两列是 IP 地址范围。我有一个 IP 地址 66.35.250.168 我需要搜索 csv 文件以查看它位于哪个范围内,并打印出相应的国家/地区名称。
由于前两个数字 (66,35) 是相同的,我打算搜索包含它的行。我可以通过这样做搜索一个完整的字符串(66.35.205.88):
import csv
with open('GeoIPCountryWhois.csv', mode='r') as f:
reader = csv.reader(f)
for row in reader:
if row[0] in ['66.35.205.88']:
print row
Run Code Online (Sandbox Code Playgroud)
如果我搜索 66.35,我不会得到任何结果。你能告诉我一种我可以搜索字符串的一部分的方法吗(这里是'66.35')?另外,您能告诉我如何找到找到字符串的确切行号吗?
提前致谢。
import csv
with open('GeoIPCountryWhois.csv', mode='r') as f:
reader = csv.reader(f)
for num, row in enumerate(reader):
if '66.35' in row[0]:
print num, row
Run Code Online (Sandbox Code Playgroud)
请记住,如果'66.35'出现在地址中的其他位置或行中的其他位置,这可能会给您带来误报。
编辑:这是一个可以实际检查它是否在正确范围内的版本。
def numeric_ip(ip):
return [int(x) for x in ip.split('.')]
desired_ip = numeric_ip('66.35.205.88')
with open('GeoIPCountryWhois.csv', mode='r') as f:
for num, row in enumerate(csv.reader(f)):
if numeric_ip(row[0]) <= desired_ip <= numeric_ip(row[1]):
print num, row
Run Code Online (Sandbox Code Playgroud)