我想从URL中读取一组csv个文件作为数据帧.这些文件的名称中包含日期,如YYYYMMDD.csv.我需要迭代一组预定义的日期,并将相应的文件读入Python.

raise httperror(req.fullu url,code,msg,hdrs,fp)

urllib.错误HTTPError:HTTP错误404:未找到

在这种情况下,我会在日期上加一天,比如从2020-05-012020-05-02,如果抛出上述错误,我会在日期上加2天,或者最多加3天,直到有一个没有错误的url可用.

由于我没有数据,我将使用以下URL作为示例:

import pandas as pd
import requests

url = 'http://winterolympicsmedals.com/medals.csv'
s = requests.get(url).content
c = pd.read_csv(s)

这里正在读取的文件是medals.csv.如果你try madels.csvmodals.csv,你会得到我所说的错误.因此,我需要知道如何通过替换文件名,分3步控制错误,直到获得所需的数据帧,比如首先我们try madels.csv导致错误,然后models.csv也导致错误,然后medals.csv导致所需的输出.

我的问题是,有时我对文件的修改也会在except分钟内失败,所以我需要知道如何适应第二次修改.

推荐答案

不需要做任何嵌套的try-except块,只需要一个try-except和一个for循环.

首先,try 读取文件的函数(返回文件内容,如果找不到文件,则返回None):

def read_file(fp):

    try:
        with open(fp, 'r') as f:
            text = f.read()
            return text
    
    except Exception as e:
        print(e)
        return None

然后,函数try 从预定义的日期查找文件(例如输入为'20220514').这些函数try 读取具有给定日期的文件内容,或在该日期后3天内的日期:

from datetime import datetime, timedelta

def read_from_predefined_date(date):

    date_format = '%Y%m%d'
    date = datetime.strptime(date, date_format)

    result = None
    for i in range(4):

        date_to_read = date + timedelta(days=i)
        date_as_string = date_to_read.strftime(date_format)
        fp = f'data/{date_as_string}.csv'
        result = read_file(fp)

        if result:
            break

    return result

要进行测试,例如创建一个data/20220515.csv并运行以下代码:

d = '20220514'
result = read_from_predefined_date(d)

Python相关问答推荐

如何在海上配对图中使某些标记周围的黑色边框

如何在Python Pandas中填充外部连接后的列中填充DDL值

不允许 Select 北极滚动?

当HTTP 201响应包含 Big Data 的POST请求时,应该是什么?  

你能把函数的返回类型用作其他地方的类型吗?'

如何删除剪裁圆的对角线的外部部分

根据边界点的属性将图划分为子图

PYODBC错误(SQL包含-26272个参数标记,但提供了235872个参数,HY 000)

使用元组扩展字典的产品挑战

大Pandas 每月重新抽样200万只和300万只

Parsel无法访问嵌套元素

如何判断变量可调用函数的参数是否都属于某个子类?

突出显示两幅图像之间的变化或差异区域

使用Python清除Excel中的内容

没有目标的验证数据

从数据帧中 Select 变量S类别

壁虎中的动态优化

Python修饰器类型提示

特定 struct 中的最大元素

如何使用libclang';S Python绑定获取返回类型和参数类型的完全限定名?