簡體   English   中英

使用外部 URL 時的 Pandas read_csv 響應代碼

[英]Pandas read_csv response codes when using an external url

我正在用pd.read_csv()替換requests.get() ,如果 pandas 沒有獲得相當於狀態代碼 200 的值,我想編寫一些異常邏輯。

有了請求,我可以寫:

response = requests.get(report_url)
if response.status_code != 200:

如何將相同的邏輯應用於pd.read_csv() 我可以檢查任何狀態代碼嗎?

我的建議是編寫一個自定義閱讀器,可以在閱讀之前檢查 URL 是否有效,盡管這違背了目的

import requests
def custom_read(url):
    try: 
        return_file = pd.read_csv(url) 
    except requests.exceptions.HTTPError as err:
        raise
    else:
        return return_file

有效的 URL 將起作用

my_file = custom_read("https://people.sc.fsu.edu/~jburkardt/data/csv/addresses.csv")

這失敗並引發requests錯誤

my_file1 = custom_read("https://uhoh.com")

否則,一旦讀取DataFrame對象,就無法訪​​問其 URL 的狀態代碼。

您可以在read_csv()中使用url ,但它無法為您提供狀態代碼。 當它具有非 200 狀態代碼並且您必須使用try/except來捕獲它時,它只會引發錯誤。 您在其他答案中有示例。

但是,如果您必須使用requests ,那么您可以稍后使用io.StringIO創建類似文件的對象(內存中的文件)並在read_csv()中使用它。

import io
import requests
import pandas as pd

response = requests.get("https://people.sc.fsu.edu/~jburkardt/data/csv/addresses.csv")

print('status_code:', response.status_code)

#if response.status_code == 200:
if response.ok:
    df = pd.read_csv( io.StringIO(response.text) )
else:
    df = None

print(df)

與使用帶有<form>HTML創建獲取csv的網頁時可以使用io.StringIO的方式相同。


據我所知read_csv(url)以類似的方式工作 - 它使用requests.get()從服務器獲取文件數據,然后使用io.StringIO讀取數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM