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

quand je fais du curl à un appel d'API lien http://domain.com/passkey=wedsmdjsjmdd

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

je l'employé de sortie de données sur un format de fichier csv, de la forme:

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

comment analyser ceci en utilisant python.

j'ai essayé:

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

mais cela ne fonctionne pas et j'ai une erreur

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

Merci!

41
demandé sur Martin Thoma 2013-04-29 20:36:43

5 réponses

Vous devez remplacer open urllib.urlopen ou urllib2.urlopen.

e.g.

import csv
import urllib2

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

for row in cr:
    print row

ceci produirait les

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
...
57
répondu eandersson 2014-07-31 09:55:05

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')

ceci Lira vos données dans un format tabulaire, qui sera très facile à traiter

47
répondu Kathirmani Sukumar 2017-09-20 18:05:30

Vous pouvez le faire avec le module requests:

url = 'http://winterolympicsmedals.com/medals.csv'
r = requests.get(url)
text = r.iter_lines()
reader = csv.reader(text, delimiter=',')
15
répondu Rodo 2016-03-22 18:40:11

pour augmenter la performance lors du téléchargement d'un gros fichier, le dessous peut 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 paramètre stream=True dans la requête GET, quand nous passons r.iter_lines() dans un fichier csv.reader(), nous utilisons générateur à csv.lecteur.)( Ce faisant, nous activons csv.reader() paresseusement itérer sur chaque ligne de la réponse for row in reader.

cela évite de charger le fichier entier dans la mémoire avant de commencer à le traiter, réduisant considérablement la mémoire les frais généraux pour les gros fichiers.

10
répondu The Aelfinn 2016-07-30 19:17:12

Google sheets offre une solution sous file -> publish to web -> et sous link vous pouvez créer un lien qui télécharge automatiquement le csv. Les Instructions et les captures d'écran peuvent également être trouvées ici: http://support.aftership.com/article/141-csv-auto-fetch-using-google-drive-spreadsheet

-4
répondu user8020211 2017-05-16 14:12:39