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!
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
...
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
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=',')
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.
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