Dieser Code öffnet die URL und hängt die /names
am Ende an und öffnet die Seite und druckt die Zeichenfolge an 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)
Aber ich bekomme dieses Ergebnis:
J,D,",", ,C,o,l,u,m,b,i,a, ,L,a,w, ,S,c,h,o,o,l,....
Wenn ich den String in ("JD", "Columbia Law School" ....) ändere, bekomme ich
JD, Columbia Law School...)
Ich konnte in der Dokumentation nicht finden, wie das Delimeter angegeben werden soll.
Wenn ich versuche zu verwenden, delimenter
erhalte ich diesen Fehler:
TypeError: 'delimeter' is an invalid keyword argument for this function
Danke für die Hilfe.
delimiter
und nichtdelimeter
: docs.python.org/library/csv.htmlAntworten:
Es erwartet eine Folge (z. B. eine Liste oder ein Tupel) von Zeichenfolgen. Du gibst ihm eine einzelne Saite. Eine Zeichenfolge ist zufällig auch eine Folge von Zeichenfolgen, aber es ist eine Folge von Zeichenfolgen mit 1 Zeichen, was nicht das ist, was Sie wollen.
Wenn Sie nur eine Zeichenfolge pro Zeile möchten, können Sie Folgendes tun:
Dies umschließt JD (eine Zeichenfolge) mit einer Liste.
quelle
writer.writerow([datetime.now().strftime("%Y-%m-%d %H:%M:%S")])
schreibt die datetime als"2016-11-05 20:30:19"
2016-11-05 13:21:11
ohne Anführungszeichen. Welche Version von Python verwenden Sie?Die Klasse csv.writer verwendet eine iterable als Argument für writerow. Da Zeichenfolgen in Python nach Zeichen iterierbar sind, sind sie ein akzeptables Argument für Writerow, aber Sie erhalten die obige Ausgabe.
Um dies zu korrigieren, können Sie den Wert basierend auf Leerzeichen aufteilen (ich gehe davon aus, dass Sie dies möchten).
quelle
Dies geschieht, weil wenn die group () -Methode einer MatchObject-Instanz nur einen einzelnen Wert zurückgibt, dieser als Zeichenfolge zurückgegeben wird. Wenn mehrere Werte vorhanden sind, werden sie als Tupel von Zeichenfolgen zurückgegeben.
Wenn Sie eine Zeile schreiben, iteriert csv.writer vermutlich über das Objekt, das Sie an das Objekt übergeben. Wenn Sie eine einzelne Zeichenfolge übergeben (die iterierbar ist), durchläuft sie ihre Zeichen und erzeugt das beobachtete Ergebnis. Wenn Sie ein Tupel von Zeichenfolgen übergeben, wird bei jeder Iteration eine tatsächliche Zeichenfolge und kein einzelnes Zeichen angezeigt.
quelle