Ce code ouvre l'url et ajoute le /names
à la fin et ouvre la page et imprime la chaîne à 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)
Mais j'obtiens ce résultat:
J,D,",", ,C,o,l,u,m,b,i,a, ,L,a,w, ,S,c,h,o,o,l,....
Si je change la chaîne en ("JD", "Columbia Law School" ....) alors j'obtiens
JD, Columbia Law School...)
Je n'ai pas pu trouver dans la documentation comment spécifier le délimiteur.
Si j'essaie d'utiliser, delimenter
j'obtiens cette erreur:
TypeError: 'delimeter' is an invalid keyword argument for this function
Merci pour l'aide.
delimiter
et pasdelimeter
: docs.python.org/library/csv.htmlRéponses:
Il attend une séquence (par exemple: une liste ou un tuple) de chaînes. Vous lui donnez une seule corde. Une chaîne est également une séquence de chaînes, mais c'est une séquence de chaînes de 1 caractère, ce qui n'est pas ce que vous voulez.
Si vous voulez juste une chaîne par ligne, vous pouvez faire quelque chose comme ceci:
Cela encapsule JD (une chaîne) avec une liste.
la source
writer.writerow([datetime.now().strftime("%Y-%m-%d %H:%M:%S")])
écrit le datetime comme"2016-11-05 20:30:19"
2016-11-05 13:21:11
sans devis. Quelle version de Python utilisez-vous?La classe csv.writer prend un itérable comme argument de writerow; comme les chaînes en Python sont itérables par caractère, elles sont un argument acceptable pour writerow, mais vous obtenez la sortie ci-dessus.
Pour corriger cela, vous pouvez diviser la valeur en fonction des espaces (je suppose que c'est ce que vous voulez)
la source
Cela se produit, car lorsque la méthode group () d'une instance MatchObject ne renvoie qu'une seule valeur, elle la renvoie sous forme de chaîne. Lorsqu'il existe plusieurs valeurs, elles sont renvoyées sous la forme d'un tuple de chaînes.
Si vous écrivez une ligne, je suppose, csv.writer itère sur l'objet que vous lui passez. Si vous passez une seule chaîne (qui est un itérable), elle itère sur ses caractères, produisant le résultat que vous observez. Si vous passez un tuple de chaînes, il obtient une chaîne réelle, pas un seul caractère à chaque itération.
la source