web-dev-qa-db-fra.com

Comment lire un fichier CSV à partir d'une URL avec Python?

lorsque je me connecte à un lien d’appel d’API http://example.com/passkey=wedsmdjsjmdd

curl 'http://example.com/passkey=wedsmdjsjmdd'

Je reçois les données de sortie des employés sur un format de fichier csv, tel que:

"Steve","421","0","421","2","","","","","","","","","421","0","421","2"

comment peut analyser cela en utilisant python.

J'ai essayé:

import csv 
cr = csv.reader(open('http://example.com/passkey=wedsmdjsjmdd',"rb"))
for row in cr:
    print row

mais cela n'a pas fonctionné et j'ai eu une erreur

http://example.com/passkey=wedsmdjsjmdd No such file or directory:

Merci!

46
mongotop

Vous devez remplacer open par rllib.urlopen ou rllib2.urlopen .

par exemple.

import csv
import urllib2

url = 'http://winterolympicsmedals.com/medals.csv'
response = urllib2.urlopen(url)
cr = csv.reader(response)

for row in cr:
    print row

Cela produirait le suivant

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

En utilisant pandas), il est très simple de lire un fichier csv directement à partir d’une url.

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

Cela lira vos données sous forme de tableau, ce qui sera très facile à traiter

66
Kathirmani Sukumar

Vous pouvez aussi le faire avec le module de requêtes:

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

Pour améliorer les performances lors du téléchargement d'un fichier volumineux, les éléments ci-dessous peuvent fonctionner un peu plus efficacement:

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   

En définissant stream=True Dans la demande GET, lorsque nous transmettons r.iter_lines() à csv.reader (), nous transmettons un générateur à csv.reader (). Ce faisant, nous permettons à csv.reader () de parcourir par la suite chaque ligne de la réponse avec for row in reader.

Cela évite de charger la totalité du fichier en mémoire avant le traitement, ce qui réduit considérablement la surcharge de mémoire pour les fichiers volumineux.

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