web-dev-qa-db-ja.com

Pythonを使用してURLからCSVファイルを読み取る方法

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:

ありがとう!

46
mongotop

openrllib.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
...
64
eandersson

pandasを使用すると、csvファイルをURLから直接読み取るのは非常に簡単です

import pandas as pd
data = pd.read_csv('https://example.com/passkey=wedsmdjsjmdd')

これにより、表形式でデータが読み取られ、処理が非常に簡単になります

66

要求モジュールでも同様に実行できます。

url = 'http://winterolympicsmedals.com/medals.csv'
r = requests.get(url)
text = r.iter_lines()
reader = csv.reader(text, delimiter=',')
16
Rodo

大きなファイルをダウンロードする際のパフォーマンスを向上させるために、以下の方が少し効率的に機能する場合があります。

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で遅延的に反復処理できるようにします。

これにより、処理を開始する前にファイル全体をメモリにロードする必要がなくなり、大きなファイルのメモリオーバーヘッドが大幅に削減されます。

13
The Aelfinn
import pandas as pd
url='https://raw.githubusercontent.com/juliencohensolal/BankMarketing/master/rawData/bank-additional-full.csv'
data = pd.read_csv(url,sep=";") # use sep="," for coma separation. 
data.describe()

enter image description here

1
user2458922