我有很多相同的网址,包括和没有' www'。 我的csv文件看起来像这样:
www.first.com
first.com
www.second.com
second.com
www.third.eu
third.eu
forth.tr
fifth.com
...`
我遍历列表,获取IP地址并将它们插入到dict中。 如何删除(或插入前检查)重复(带www)条目?
我的预期结果是:
[{'entry': ['first.com', '192.168.31.101'},
{'entry': ['second.com', '192.168.31.102'},
{'entry': ['third.eu', '192.168.31.103'},
{'entry': ['forth.tr', '192.168.31.104'},
{'entry': ['fifth.com', '192.168.31.105'}]
with open('myfile.csv', 'rb') as csvfile:
reader = csv.reader(csvfile, delimiter=' ')
result = []
for row in reader:
addr = socket.gethostbyname(row[0])
result.append({'entry':[row[0], addr]})
答案 0 :(得分:3)
使用一个集合来确定以前是否还没有看到过IP地址。如果地址未知,请将其添加到集合并存储记录。
并删除'www。'如果你想存储基本网址,请从网址中获取。
Action<>
答案 1 :(得分:1)
如果有的话,首先要删除'www'。然后你可以使用“如果在dict中的地址:”检查它是否在字典中。那就是:
with open('myfile.csv', 'rb') as csvfile:
reader = csv.reader(csvfile, delimiter=' ')
result = []
for row in reader:
addr = socket.gethostbyname(row[0])
if addr[:4] == "www.":
addr = addr[4:]
add = True
for item in result.values():
if addr == item[0]:
add = False
break
if add:
result.append({'entry':[row[0], addr]})
答案 2 :(得分:0)
您可以通过
测试字典中是否包含它url = url.replace("www.","")
url = url.replace("http://","")
url = url.split("/")[0]
if url in my_dict:
pass
else:
my_dict[url] = ip_address
答案 3 :(得分:0)
为什么你有一个包含单个项目的词典列表?为什么不用一本字典呢?前两个条目看起来像这样:
url_dict = {'first.com':'192.168.31.101', 'second.com':'192.168.31.102'}
如果您想检查包含www的网址是否已存在于dict中:
if url[:4] == 'www.':
if url[4:] in url_dict.keys():
continue
答案 4 :(得分:0)
使用列表推导:(内部循环将每次外部迭代迭代一次以替换&#39; www&#39;)
with open('myfile.csv', 'rb') as csvfile:
reader = csv.reader(csvfile, delimiter=' ')
result = {h: socket.gethostbyname(h) for w in reader (w.replace('www.', '') for w in h) if result and h not in result.keys()}
答案 5 :(得分:0)
有没有理由让所有这些&#39;进入&#39;键?
拥有这样的字典更合理:
entry = {'url': 'ip'}
然后你的代码可能是:
import csv
import socket
with open('myfile.csv', 'r') as csvfile:
reader = csv.reader(csvfile, delimiter=' ')
entry = {}
for row in reader:
for url in row:
addr = socket.gethostbyname(url)
url = url.replace('www.', '') # get rid of www.
if not(url in entry): # if key is not already in dict
entry[url] = addr
你的输入词典就像:
{'google.com': '173.194.122.240', 'youtube.com': '173.194.73.190'}