Почему это делает csvwriter.writerow() поставить запятую после каждого символа?
этот код открывает 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
спасибо о помощи.
3 ответов:
Он ожидает последовательность (например: список или кортеж) строк. Вы даете ему одну строку. Строка также является последовательностью строк, но это последовательность строк из 1 символа, что не то, что вы хотите.
Если вы просто хотите одну строку в строке, вы можете сделать что-то вроде этого:
csvwriter.writerow([JD])Это обертывание JD (строка) со списком.
csv.класс writer принимает итерацию в качестве аргумента для writerow; поскольку строки в Python итеративны по символу, они являются приемлемым аргументом для writerow, но вы получаете вышеприведенный вывод.
чтобы исправить это, вы можете разделить значение на основе пробелов (я предполагаю, что это то, что вы хотите)
csvwriter.writerow(JD.split())
это происходит, потому что когда метод group() экземпляра MatchObject возвращает только одно значение, он возвращает его как строку. При наличии нескольких значений они возвращаются в виде кортежа строк.
Если вы пишете строку, я думаю, csv.писатель перебирает объект, который вы передаете ему. Если вы передаете одну строку (которая является итерационной), она повторяет свои символы, создавая результат, который вы наблюдаете. Если вы передаете кортеж строк, он получает фактическую строку, а не один символ на каждой итерации.
Comments