web-dev-qa-db-ja.com

Pythonを使用してダウンロードしたCSVファイルを保存する

リクエストのあるリンクからcsvファイルをダウンロードし、MSFT.csvとして保存したい。しかし、私のコードはエラーを返します

ファイル "<stdin>"、1行目、_csv.Error:引用符で囲まれていないフィールドに改行文字が表示されています-ユニバーサル改行モードでファイルを開く必要がありますか?

import requests
import csv

data=requests.get('https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=MSFT&apikey=demo&datatype=csv'
cr = csv.reader(data)

for row in cr:
    print row

MSFT.csvで保存するにはどうすればよいですか?

6
lotteryman

このデータをCSVファイルに書き込もうとしている場合は、最初にrequests.getを使用してデータをダウンロードしてから、各行をCSVファイルに保存できます。

import csv
import requests

url = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=MSFT&apikey=demo&datatype=csv'
response = requests.get(url)        

with open('out.csv', 'w') as f:
    writer = csv.writer(f)
    for line in response.iter_lines():
        writer.writerow(line.decode('utf-8').split(','))

または、pandasがインストールされている場合(pip install --user pandas)の場合、URLを直接渡すことでデータをロードできます。

import pandas as pd

df = pd.read_csv(url)   
df.head()

    timestamp    open    high     low   close  adjusted_close    volume  dividend_amount  split_coefficient
0  2019-06-19  135.00  135.93  133.81  135.69          135.69  17946556              0.0                1.0
1  2019-06-18  134.19  135.24  133.57  135.16          135.16  25908534              0.0                1.0
2  2019-06-17  132.63  133.73  132.53  132.85          132.85  14517785              0.0                1.0
3  2019-06-14  132.26  133.79  131.64  132.45          132.45  17821703              0.0                1.0
4  2019-06-13  131.98  132.67  131.56  132.32          132.32  17200848              0.0                1.0

df.to_csv('out.csv')
14
cs95

あなたは要求を介してそれを達成することができます

import os
import requests

def download_file(url, filename):
    ''' Downloads file from the url and save it as filename '''
    # check if file already exists
    if not os.path.isfile(filename):
        print('Downloading File')
        response = requests.get(url)
        # Check if the response is ok (200)
        if response.status_code == 200:
            # Open file and write the content
            with open(filename, 'wb') as file:
                # A chunk of 128 bytes
                for chunk in response:
                    file.write(chunk)
    else:
        print('File exists')

必要なURLとファイル名で関数を呼び出すことができます。あなたの場合は次のようになります:

url = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=MSFT&apikey=demo&datatype=csv'
filename = 'MSFT.csv'
download_file(url, filename)

お役に立てれば。

4
Sagun Shrestha

より簡単な方法があります。

import urllib.request

csv_url = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=MSFT&apikey=demo&datatype=csv'

urllib.request.urlretrieve(csv_url, 'MSFT.csv')
0