Получение URL-адресов с помощью программы чтения csv и помещение их в список

Я пытаюсь сделать очень простую программу, в которой у меня есть два 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». из списка адресов? У меня есть 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]

person easy_c0mpany80    schedule 26.02.2016    source источник
comment
хорошо, я думаю, что я понял это, выполнив следующее: для строки в reader2: orders_list.append(','.join(row)) который, кажется, создал список, хотя я до сих пор не понимаю, почему эти квадратные скобки разложить каждый предмет в первый раз, когда я попытался это сделать...   -  person easy_c0mpany80    schedule 26.02.2016


Ответы (1)


Итак, в основном csv.reader читает пользовательский файл csv, и его метод next() дает следующую строку, и в python эта строка представлена ​​​​в виде списка, даже если он состоит из одного поля. Вот почему вы получаете список списков с одним элементом вместо неявного чтения, такого как list(reader2), возможно, вы хотите его явно:

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

И поскольку вы хотите удалить «http://» и «www» из URL-адресов, вы можете сделать это прямо внутри этой конструкции:

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), чтобы избежать удаления «www» внутри URL-адреса, например, если у вас есть что-то вроде этого: «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)
person S.Kozlov    schedule 26.02.2016
comment
спасибо, я разобрался, я думаю, и внес некоторые изменения в свой код в посте выше - person easy_c0mpany80; 26.02.2016