aPI呼び出しリンクにカールするとき http://example.com/passkey=wedsmdjsjmdd
curl 'http://example.com/passkey=wedsmdjsjmdd'
次のようなcsvファイル形式で従業員の出力データを取得します。
"Steve","421","0","421","2","","","","","","","","","421","0","421","2"
pythonを使用してこれをどのように解析できますか?.
私は試した:
import csv
cr = csv.reader(open('http://example.com/passkey=wedsmdjsjmdd',"rb"))
for row in cr:
print row
しかし、それは機能せず、エラーが発生しました
http://example.com/passkey=wedsmdjsjmdd No such file or directory:
ありがとう!
open
を rllib.urlopen または rllib2.urlopen に置き換える必要があります。
例えば.
import csv
import urllib2
url = 'http://winterolympicsmedals.com/medals.csv'
response = urllib2.urlopen(url)
cr = csv.reader(response)
for row in cr:
print row
これは次を出力します
Year,City,Sport,Discipline,NOC,Event,Event gender,Medal
1924,Chamonix,Skating,Figure skating,AUT,individual,M,Silver
1924,Chamonix,Skating,Figure skating,AUT,individual,W,Gold
...
pandasを使用すると、csvファイルをURLから直接読み取るのは非常に簡単です
import pandas as pd
data = pd.read_csv('https://example.com/passkey=wedsmdjsjmdd')
これにより、表形式でデータが読み取られ、処理が非常に簡単になります
要求モジュールでも同様に実行できます。
url = 'http://winterolympicsmedals.com/medals.csv'
r = requests.get(url)
text = r.iter_lines()
reader = csv.reader(text, delimiter=',')
大きなファイルをダウンロードする際のパフォーマンスを向上させるために、以下の方が少し効率的に機能する場合があります。
import requests
from contextlib import closing
import csv
url = "http://download-and-process-csv-efficiently/python.csv"
with closing(requests.get(url, stream=True)) as r:
reader = csv.reader(r.iter_lines(), delimiter=',', quotechar='"')
for row in reader:
# Handle each row here...
print row
GET要求でstream=True
を設定することにより、r.iter_lines()
をcsv.reader()に渡すときに、 generator をcsv.reader()に渡します。そうすることで、csv.reader()が応答の各行をfor row in reader
で遅延的に反復処理できるようにします。
これにより、処理を開始する前にファイル全体をメモリにロードする必要がなくなり、大きなファイルのメモリオーバーヘッドが大幅に削減されます。