使用Python在CSV文件中搜索和匹配字符串的一部分
这是我拥有的一个大型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"
前两列是一些IP地址的范围。我有一个IP地址是66.35.250.168。我需要在这个csv文件中查找这个IP地址属于哪个范围,并打印出对应的国家名称。
因为前两个数字(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
但是如果我只搜索66.35,就没有任何结果。你能告诉我有什么方法可以搜索字符串的一部分(这里是'66.35')吗?另外,你能告诉我如何找到包含这个字符串的确切行号吗?
提前谢谢你。
3 个回答
0
你可以用普通的布尔测试来检查字符串,看看你想要的IP地址是否在这个范围内:
import csv
desired_ip = "66.35.232.56"
desired_ip_n = [str(n) for n in desired_ip.split(".")
with open('GeoIPCountryWhois.csv', mode='r') as f:
reader = csv.reader(f)
row_num = 1
for row in reader:
ip_start_n = [str(n) for n in row[0].split(".")]
ip_end_n = [str(n) for n in row[1].split(".")]
if desired_ip_n >= ip_start_n and desired_ip <= ip_end_n:
print row
print row_num
row_num += 1
1
没有理由说 in
不应该工作。
确保你把顺序调换一下。
if '66.35' in row[0]:
print row
5
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
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
请记住,如果'66.35'
出现在地址的其他地方或者行的其他位置,这可能会导致错误的判断。
补充:这里有一个版本,可以真正检查它是否在正确的范围内。