Итак, что происходит, вызов help
может пролить некоторый свет.
>>> 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.
поэтому кажется, что csv.reader
ожидает какой-то итератор, который вернет строку, но мы передаем строку, которая повторяется на основе char, поэтому ее синтаксический анализ символ за символом, один из способов исправить это - создать временный файл , но нам это не нужно, нам просто нужно передать любой итерируемый объект.
обратите внимание на следующее, которое просто разбивает строку на список строк, прежде чем она будет передана читателю.
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
это, кажется, работает.
Я также рекомендую использовать csv.DictReader
, это очень полезно.
>>> 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'}
в основном он возвращает словарь для каждой строки, используя заголовок в качестве ключа, таким образом, нам не нужно отслеживать порядок, а вместо этого просто имя делает нас немного проще, т.е. row['Votes']
кажется более читаемым, чем row[4]
...
person
Samy Vilar
schedule
27.08.2012