così che cosa sta succedendo, beh, una chiamata a help
potrebbe far luce.
>>> help(csv.reader)
reader(...)
csv_reader = reader(iterable [, dialect='excel']
[optional keyword args])
for row in csv_reader:
process(row)
The "iterable" argument can be any object that returns a line
of input for each iteration, such as a file object or a list. The
optional "dialect" parameter is discussed below. The function
also accepts optional keyword arguments which override settings
provided by the dialect.
Così sembra che csv.reader
aspetta un iteratore di qualche tipo che restituirà una linea, ma stiamo passando una stringa che itera su un char basi che è il motivo per cui il suo carattere di analisi per carattere, un modo per risolvere questo problema sarebbe quello di generare un file temporaneo, ma non abbiamo bisogno di, abbiamo solo bisogno di passare qualsiasi oggetto iterable.
notare quanto segue, che semplicemente divide la stringa in un elenco di righe, prima di essere alimentata al lettore.
import csv
import requests
r = requests.get('http://vote.wa.gov/results/current/export/MediaResults.txt')
data = r.text
reader = csv.reader(data.splitlines(), delimiter='\t')
for row in reader:
print row
questo sembra funzionare.
Si consiglia inoltre di utilizzare csv.DictReader
piuttosto utile.
>>> reader = csv.DictReader(data.splitlines(), delimiter='\t')
>>> for row in reader:
... print row
{'Votes': '417141', 'BallotName': 'Michael Baumgartner', 'RaceID': '2', 'RaceName': 'U.S. Senator', 'PartyName': '(Prefers Republican Party)', 'TotalBallotsCastByRace': '1387059', 'RaceJurisdictionTypeName': 'Federal', 'BallotID': '23036'}
{'Votes': '15005', 'BallotName': 'Will Baker', 'RaceID': '2', 'RaceName': 'U.S. Senator', 'PartyName': '(Prefers Reform Party)', 'TotalBallotsCastByRace': '1387059', 'RaceJurisdictionTypeName': 'Federal', 'BallotID': '27435'}
fondamentalmente si restituisce un dizionario per ogni riga, utilizzando l'intestazione come la chiave, in questo modo non abbiamo bisogno di tenere traccia dell'ordine, ma invece solo il nome facendo un po 'più facile per noi IE row['Votes']
sembra più leggibile quindi row[4]
...
Dovrei averlo capito da solo. Grazie mille. – foxyNinja7