¿Cómo leer un archivo CSV desde una URL con Python?

cuando hago curl a un enlace de llamada a la API http://example.com/passkey=wedsmdjsjmdd

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

Obtengo los datos de salida del empleado en un formato de archivo csv, como:

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

¿Cómo se puede analizar a través de este uso de python.

Lo intenté:

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

Pero no funcionó y me salió un error.

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

¡Gracias!

Debe reemplazar open con urllib.urlopen o urllib2.urlopen .

p.ej

 import csv import urllib2 url = 'http://winterolympicsmedals.com/medals.csv' response = urllib2.urlopen(url) cr = csv.reader(response) for row in cr: print row 

Esto daría como resultado el siguiente

 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 ... 

Usar pandas es muy simple leer un archivo csv directamente desde una url

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

Esto leerá sus datos en formato tabular, que será muy fácil de procesar

Podrías hacerlo también con el módulo de solicitudes:

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

Para boost el rendimiento al descargar un archivo grande, lo siguiente puede funcionar un poco más eficientemente:

 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 

Al establecer stream=True en la solicitud GET, cuando pasamos r.iter_lines() a csv.reader (), pasamos un generador a csv.reader (). Al hacerlo, habilitamos csv.reader () para iterar perezosamente sobre cada línea en la respuesta con for row in reader .

Esto evita cargar todo el archivo en la memoria antes de comenzar a procesarlo, lo que reduce drásticamente la sobrecarga de memoria para archivos grandes.