簡體   English   中英

我正在嘗試解析我從互聯網上提取的csv文件。 python中的csv閱讀器將每個字符分成一個列表元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM