0

私はPythonが初めてで、CSVパーサーに問題があります。コードは次のとおりです。

import urllib2
import csv


u = urllib2.urlopen(r'http://finance.yahoo.com/d/quotes.csv?s=AAPL+GOOG+MSFT&f=nab')
data = u.read()

reader = csv.reader(data)

for row in reader:
    print row

Yahoo はこの生の csv を返します。

"Apple Inc.",482.09,482.00
"Google Inc.",877.20,876.94
"Microsoft Corpora",33.34,33.33

これを解析して、Ticker、Bid、Offer の 3 つのフィールドを持つ単純な JSON オブジェクトを作成したいと考えています。

しかし、データは csv.reader() から次のように取得されます。

['Apple Inc.']
['', '']
['4']
['8']
['2']
['.']
['5']
['5']
['', '']
['4']
['8']
['2']
['.']
['4']
['8']
[]
[]
['Google Inc.']
['', '']
['8']
['7']
['6']
['.']
['2']
['4']
['', '']
['8']
['7']
['6']
['.']
['1']
['0']
[]
[]
['Microsoft Corpora']
['', '']
['3']
['3']
['.']
['2']
['9']
['', '']
['3']
['3']
['.']
['2']
['8']
[]
[]

各番号の行を分割しているようです。ここで私が間違っていることについてのアイデアはありますか?

4

3 に答える 3

1

csv.readerfactory は、最初の引数として、改行を含む完全な文字列ではなく、リストまたはその他の反復可能な反復可能な行を受け取ります (文字単位で反復するだけです)。data = u.readlines()の代わりに使用しdata = u.read()ます。

于 2013-09-27T20:28:07.340 に答える
0

見積もり:

いわゆる CSV (カンマ区切り値) 形式は、スプレッドシートやデータベースの最も一般的なインポートおよびエクスポート形式です。「CSV 規格」は存在しないため、フォーマットは、それを読み書きする多くのアプリケーションによって操作上定義されます。標準がないということは、さまざまなアプリケーションによって生成および消費されるデータに微妙な違いがしばしば存在することを意味します。これらの違いにより、複数のソースからの CSV ファイルを処理するのが面倒になる場合があります。それでも、区切り文字と引用文字は異なりますが、全体的な形式は十分に似ているため、そのようなデータを効率的に操作できる単一のモジュールを作成して、プログラマーからデータの読み取りと書き込みの詳細を隠すことができます。

独自の csv を作成して動作するかどうかを確認してください。動作する場合は、csv 形式に何か違いがあります。

于 2013-09-27T20:30:50.190 に答える