Этот код открывает URL-адрес и добавляет /names
в конец, а также открывает страницу и печатает строку test1.csv
:
import urllib2
import re
import csv
url = ("http://www.example.com")
bios = [u'/name1', u'/name2', u'/name3']
csvwriter = csv.writer(open("/test1.csv", "a"))
for l in bios:
OpenThisLink = url + l
response = urllib2.urlopen(OpenThisLink)
html = response.read()
item = re.search('(JD)(.*?)(\d+)', html)
if item:
JD = item.group()
csvwriter.writerow(JD)
else:
NoJD = "NoJD"
csvwriter.writerow(NoJD)
Но я получаю такой результат:
J,D,",", ,C,o,l,u,m,b,i,a, ,L,a,w, ,S,c,h,o,o,l,....
Если я поменяю строку на ("JD", "Columbia Law School" ....), я получу
JD, Columbia Law School...)
Я не нашел в документации, как указать разделитель.
Если я попытаюсь использовать, delimenter
я получаю эту ошибку:
TypeError: 'delimeter' is an invalid keyword argument for this function
Спасибо за помощь.
delimiter
а неdelimeter
: docs.python.org/library/csv.htmlОтветы:
Ожидается последовательность (например, список или кортеж) строк. Вы даете ему одну строку. Строка тоже может быть последовательностью строк, но это последовательность строк из 1 символа, а это не то, что вам нужно.
Если вам нужна только одна строка в строке, вы можете сделать что-то вроде этого:
Это обертывает JD (строку) списком.
источник
writer.writerow([datetime.now().strftime("%Y-%m-%d %H:%M:%S")])
пишет datetime как"2016-11-05 20:30:19"
2016-11-05 13:21:11
без кавычек. Какую версию Python вы используете?Класс csv.writer принимает итеративный объект в качестве аргумента для writerow; поскольку строки в Python повторяются по символам, они являются приемлемым аргументом для writerow, но вы получите результат, указанный выше.
Чтобы исправить это, вы можете разделить значение на основе пробелов (я предполагаю, что вы хотите)
источник
Это происходит потому, что когда метод group () экземпляра MatchObject возвращает только одно значение, он возвращает его как строку. Когда имеется несколько значений, они возвращаются как кортеж строк.
Если вы пишете строку, я думаю, csv.writer выполняет итерацию по объекту, который вы ему передаете. Если вы передаете одну строку (которая является итерируемой), она выполняет итерацию по своим символам, давая результат, который вы наблюдаете. Если вы передаете кортеж строк, он получает настоящую строку, а не один символ на каждой итерации.
источник