Este código abre la URL y agrega el /names
al final y abre la página e imprime la cadena en 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)
Pero obtengo este resultado:
J,D,",", ,C,o,l,u,m,b,i,a, ,L,a,w, ,S,c,h,o,o,l,....
Si cambio la cadena a ("JD", "Columbia Law School" ...), obtengo
JD, Columbia Law School...)
No pude encontrar en la documentación cómo especificar el delimitador.
Si intento usar delimenter
, obtengo este error:
TypeError: 'delimeter' is an invalid keyword argument for this function
Gracias por la ayuda.
delimiter
y nodelimeter
: docs.python.org/library/csv.htmlRespuestas:
Espera una secuencia (por ejemplo: una lista o tupla) de cadenas. Le estás dando una sola cuerda. Una cadena también es una secuencia de cadenas, pero es una secuencia de cadenas de 1 carácter, que no es lo que quieres.
Si solo desea una cadena por fila, puede hacer algo como esto:
Esto envuelve JD (una cadena) con una lista.
fuente
writer.writerow([datetime.now().strftime("%Y-%m-%d %H:%M:%S")])
escribe la fecha y hora como"2016-11-05 20:30:19"
2016-11-05 13:21:11
sin comillas. ¿Qué versión de Python estás usando?La clase csv.writer toma un iterable como argumento para Writerow; Como las cadenas en Python son iterables por carácter, son un argumento aceptable para Writer ahora, pero obtienes el resultado anterior.
Para corregir esto, puede dividir el valor en función de los espacios en blanco (supongo que eso es lo que quiere)
fuente
Esto sucede porque cuando el método group () de una instancia de MatchObject devuelve solo un valor, lo devuelve como una cadena. Cuando hay varios valores, se devuelven como una tupla de cadenas.
Si está escribiendo una fila, supongo, csv.writer itera sobre el objeto que le pasa. Si pasa una sola cadena (que es iterable), itera sobre sus caracteres, produciendo el resultado que está observando. Si pasa una tupla de cadenas, obtiene una cadena real, no un solo carácter en cada iteración.
fuente