使用 csv reader 获取 url 并将它们放入列表中
Getting urls with csv reader and putting them into a list
我正在尝试制作一个非常简单的程序,我有两个 csv 文件,其中包含域列表或博客 post urls。我正在尝试导入第一个并将域列和价格列制作成我设法做到的字典。
现在我想导入第二个 csv 文件,它只是博客的一个专栏 post urls.
在我从第二个文件导入 urls 并将它们打印出来后,每个 url 似乎都包含在列表中的 [] 中,如下所示:
[['http://www.gardening-blog.com/post-1'],['http://www.foodie-blog.com/post-2'],['http://www.someotherblog.com/post-1']..等等等等
这与使用 csv 导入有关吗reader?
我还有另一个问题,从 url 列表中删除 'http://' 和 'www.' 的最佳方法是什么?我在下面使用 map 和 join(已注释掉)尝试了 2 种方法,但它们不起作用,但我觉得这与列表问题有关。我用字典做了这个,但我不能用列表替换。
谢谢
import csv
reader = csv.reader(open("domains_prices.csv", 'r'))
reader2 = csv.reader(open('orders_list.csv', 'r'))
domains_prices={}
orders_list = list(reader2) #import all blog post urls into a list
for domain, price in reader:
domain = domain.replace('http://', '').replace('www', '')
domains_prices[domain] = price
#orders_list = ''.join(orders_list).replace('http://','').split()
#map(str.strip, orders_list)
print orders_list
编辑
以下是我所做的更改并且现在似乎可以正常工作:
orders_list = []
for row in reader2:
orders_list.append(','.join(row))
orders_list = [s.replace('http://', '').replace('www.','') for s in orders_list]
所以,基本上 csv.reader
读取自定义 csv 文件,他的 next() 方法给出下一行,而在 python 中,这一行表示为列表,即使它由单个字段组成.这就是为什么您收到的是包含单个元素的列表列表,而不是像 list(reader2)
这样的隐式读取,您可能想要明确地这样做:
orders_list = [row[0] for row in reader2]
并且当您想从 url 中删除 "http://" 和 "www" 时,您可以直接在该结构中进行操作:
orders_list = [row[0].replace("http://", "").replace("www.", "") for row in reader2]
但我建议您更明智地删除 http 和 www,因为架构可能是 "http" 或 "https",我想您只想删除 "www"从 link 开始。所以你可以看看 urllib2.urlparse 模块,如果它以 "www":
开头,还可以检查网络地址 (link)
url = url.replace("www.", "", 1) if url.startswith("www.") else url
注意:1 代表 url.replace("www.", "", 1)
以避免从 url 地址内部删除 "www",例如,如果您有这样的内容:"www.facebook.com/best-www-address".
是的,最后你可以得到这样的东西:
links = []
for row in reader2:
edited_link = row[0].replace("http://", "", 1) if row[0].startswith("http://") else row[0]
edited_link = edited_link.replace("https://", "", 1) if edited_link.startswith("https://") else edited_link
edited_link = edited_link.replace("www.", "", 1) if edited_link.startswith("www.") else edited_link
links.append(edited_link)
我正在尝试制作一个非常简单的程序,我有两个 csv 文件,其中包含域列表或博客 post urls。我正在尝试导入第一个并将域列和价格列制作成我设法做到的字典。
现在我想导入第二个 csv 文件,它只是博客的一个专栏 post urls.
在我从第二个文件导入 urls 并将它们打印出来后,每个 url 似乎都包含在列表中的 [] 中,如下所示:
[['http://www.gardening-blog.com/post-1'],['http://www.foodie-blog.com/post-2'],['http://www.someotherblog.com/post-1']..等等等等
这与使用 csv 导入有关吗reader?
我还有另一个问题,从 url 列表中删除 'http://' 和 'www.' 的最佳方法是什么?我在下面使用 map 和 join(已注释掉)尝试了 2 种方法,但它们不起作用,但我觉得这与列表问题有关。我用字典做了这个,但我不能用列表替换。
谢谢
import csv
reader = csv.reader(open("domains_prices.csv", 'r'))
reader2 = csv.reader(open('orders_list.csv', 'r'))
domains_prices={}
orders_list = list(reader2) #import all blog post urls into a list
for domain, price in reader:
domain = domain.replace('http://', '').replace('www', '')
domains_prices[domain] = price
#orders_list = ''.join(orders_list).replace('http://','').split()
#map(str.strip, orders_list)
print orders_list
编辑
以下是我所做的更改并且现在似乎可以正常工作:
orders_list = []
for row in reader2:
orders_list.append(','.join(row))
orders_list = [s.replace('http://', '').replace('www.','') for s in orders_list]
所以,基本上 csv.reader
读取自定义 csv 文件,他的 next() 方法给出下一行,而在 python 中,这一行表示为列表,即使它由单个字段组成.这就是为什么您收到的是包含单个元素的列表列表,而不是像 list(reader2)
这样的隐式读取,您可能想要明确地这样做:
orders_list = [row[0] for row in reader2]
并且当您想从 url 中删除 "http://" 和 "www" 时,您可以直接在该结构中进行操作:
orders_list = [row[0].replace("http://", "").replace("www.", "") for row in reader2]
但我建议您更明智地删除 http 和 www,因为架构可能是 "http" 或 "https",我想您只想删除 "www"从 link 开始。所以你可以看看 urllib2.urlparse 模块,如果它以 "www":
开头,还可以检查网络地址 (link)url = url.replace("www.", "", 1) if url.startswith("www.") else url
注意:1 代表 url.replace("www.", "", 1)
以避免从 url 地址内部删除 "www",例如,如果您有这样的内容:"www.facebook.com/best-www-address".
是的,最后你可以得到这样的东西:
links = []
for row in reader2:
edited_link = row[0].replace("http://", "", 1) if row[0].startswith("http://") else row[0]
edited_link = edited_link.replace("https://", "", 1) if edited_link.startswith("https://") else edited_link
edited_link = edited_link.replace("www.", "", 1) if edited_link.startswith("www.") else edited_link
links.append(edited_link)