【问题标题】:Getting urls with csv reader and putting them into a list使用 csv 阅读器获取 url 并将它们放入列表
【发布时间】:2016-02-26 13:47:47
【问题描述】:

我正在尝试制作一个非常简单的程序,其中有两个 csv 文件,其中包含域列表或博客文章 URL。我正在尝试导入第一个并将域列和价格列放入我已经设法做到的字典中。

现在我想导入第二个 csv 文件,它只是一列博客文章 url。

在我从第二个文件导入 url 并将它们打印出来之后,每个 url 似乎都包含在 [] 中,如下所示:

[['http://www.gardening-blog.com/post-1'],['http://www.foodie-blog.com/post-2'],['http://www.someotherblog.com/post-1']....等等等等

这与使用 csv 阅读器导入有关吗?

另外我还有一个问题,剥离“http://”和“www”的最佳方式是什么。从网址列表中?我有两种方法,我在下面尝试过使用 map 和 join(注释掉),但它们不起作用,但我感觉这与列表问题有关。我已经用字典做了这个,但我不能用列表替换。

谢谢

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]

【问题讨论】:

  • 好的,我想我可能已经通过执行以下操作弄清楚了:对于 reader2 中的行:orders_list.append(','.join(row)) 似乎已经创建了一个列表,尽管我仍然不明白为什么在我第一次尝试这样做时将这些方括号放在每个项目周围......

标签: python csv reader


【解决方案1】:

所以,基本上csv.reader 读取自定义 csv 文件,他的 next() 方法给出下一行,在 python 中,该行表示为列表,即使它由单个字段组成。这就是为什么您会收到带有单个元素的列表列表,而不是像 list(reader2) 这样的隐式读取,您可能想要明确地接收它:

orders_list = [row[0] for row in reader2]

当您想从网址中删除“http://”和“www”时,您可以直接在该结构中执行此操作:

orders_list = [row[0].replace("http://", "").replace("www.", "") for row in reader2]

但我建议更聪明地删除 http 和 www,因为架构可能是“http”或“https”,我猜您只想从链接的开头删除“www”。所以你可以看看 urllib2.urlparse 模块,如果它以“www”开头,还可以检查网址(链接):

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)

【讨论】:

  • 谢谢,我想通了,并在上面的帖子中对我的代码进行了一些编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 2017-02-19
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多