How to read a CSV file from a URL with Python?

梦想与她 提交于 2019-11-26 12:55:44

问题


when I do curl to a API call link http://example.com/passkey=wedsmdjsjmdd

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

I get the employee output data on a csv file format, like:

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

how can parse through this using python.

I tried:

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

but it didn\'t work and I got an error

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

Thanks!


回答1:


You need to replace open with urllib.urlopen or 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

This would output the following

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



回答2:


Using pandas it is very simple to read a csv file directly from a url

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

This will read your data in tabular format, which will be very easy to process




回答3:


You could do it with the requests module as well:

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



回答4:


To increase performance when downloading a large file, the below may work a bit more efficiently:

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   

By setting stream=True in the GET request, when we pass r.iter_lines() to csv.reader(), we are passing a generator to csv.reader(). By doing so, we enable csv.reader() to lazily iterate over each line in the response with for row in reader.

This avoids loading the entire file into memory before we start processing it, drastically reducing memory overhead for large files.




回答5:


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




回答6:


what you were trying to do with the curl command was to download the file to your local hard drive(HD). You however need to specify a path on HD

curl http://example.com/passkey=wedsmdjsjmdd -o ./example.csv
cr = csv.reader(open('./example.csv',"r"))
for row in cr:
    print row





来源:https://stackoverflow.com/questions/16283799/how-to-read-a-csv-file-from-a-url-with-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!