Este código abre o url e anexa o /names
no final e abre a página e imprime a string para 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)
Mas eu obtenho este resultado:
J,D,",", ,C,o,l,u,m,b,i,a, ,L,a,w, ,S,c,h,o,o,l,....
Se eu mudar a string para ("JD", "Columbia Law School" ....), então recebo
JD, Columbia Law School...)
Não consegui encontrar na documentação como especificar o delimitador.
Se tento usar delimenter
, recebo este erro:
TypeError: 'delimeter' is an invalid keyword argument for this function
Obrigado pela ajuda.
delimiter
e não édelimeter
: docs.python.org/library/csv.htmlRespostas:
Ele espera uma sequência (por exemplo: uma lista ou tupla) de strings. Você está dando uma única corda. Uma string também é uma sequência de strings, mas é uma sequência de strings de 1 caractere, que não é o que você deseja.
Se você quiser apenas uma string por linha, poderá fazer algo assim:
Isso envolve JD (uma string) com uma lista.
fonte
writer.writerow([datetime.now().strftime("%Y-%m-%d %H:%M:%S")])
escreve a data e hora como"2016-11-05 20:30:19"
2016-11-05 13:21:11
sem aspas. Qual versão do Python você está usando?A classe csv.writer aceita um iterável como argumento de writerow; como strings em Python são iteráveis por caractere, eles são um argumento aceitável para o writerow, mas você obtém a saída acima.
Para corrigir isso, você pode dividir o valor com base em espaços em branco (presumo que seja o que você deseja)
fonte
Isso acontece porque quando o método group () de uma ocorrência de MatchObject retorna apenas um único valor, ele o retorna como uma string. Quando há vários valores, eles são retornados como uma tupla de strings.
Se você estiver escrevendo uma linha, suponho que csv.writer itera sobre o objeto que você passar para ele. Se você passar uma única string (que é iterável), ela itera sobre seus caracteres, produzindo o resultado que você está observando. Se você passar uma tupla de strings, ela obterá uma string real, não um único caractere em cada iteração.
fonte