[英]I am trying to parse a csv file I am pulling from the internet. The csv reader in python is separating each character into a list element
我正在嘗試解析我從互聯網上提取的csv文件。 python中的csv閱讀器將每個字符分成一個list元素。
r.text是格式正確的csv文件
r = requests.get('http://chart.finance.yahoo.com/table.csv?s=USLV&a=0&b=1&c=2012&d=8&e=30&f=2016&g=m&ignore=.csv')
csv_f = csv.reader(r.text, skipinitialspace=True, delimiter=',')
for row in csv_f:
print (row)
如何正確解析此文件? 謝謝!
您正在將多行字符串傳遞給csv模塊:它被視為1個字符的行的列表。
您必須使用str.splitlines()
根據各行進行str.splitlines()
,如下所示:
csv_f = csv.reader(r.text.splitlines(), skipinitialspace=True, delimiter=',')
for row in csv_f:
print (row)
結果:
['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
['2016-09-01', '20.66', '25.790001', '20.48', '21.98', '1302000', '21.98']
['2016-08-01', '27.969999', '29.09', '20.00', '20.60', '1314100', '20.60']
['2016-07-01', '23.73', '28.049999', '23.48', '27.49', '2247200', '27.49']
['2016-06-01', '13.74', '22.200001', '13.36', '22.110001', '1536800', '22.110001']
['2016-05-02', '19.370001', '19.379999', '13.70', '13.75', '1015600', '13.75']
...
csv.reader()
需要一個可產生行的可迭代對象,但是您要傳遞一個string 。 字符串迭代產生單個字符。
通過分割文本來傳遞行:
csv_f = csv.reader(r.text.splitlines(), skipinitialspace=True, delimiter=',')
或傳遞類似文件的對象:
from io import StringIO
csv_f = csv.reader(StringIO(r.text), skipinitialspace=True, delimiter=',')
您可以使用經過戰斗驗證的方法。 這對我有用:
#!/usr/bin/env python
import csv
import urllib2
url = 'http://chart.finance.yahoo.com/table.csv?s=USLV&a=0&b=1&c=2012&d=8&e=30&f=2016&g=m&ignore=.csv'
response = urllib2.urlopen(url)
printer = csv.reader(response)
for row in printer:
print row
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.