首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含示例数据集但延迟下载的Python包?

包含示例数据集但延迟下载的Python包?
EN

Stack Overflow用户
提问于 2020-07-18 19:18:25
回答 1查看 61关注 0票数 1

我有一个数据分析工具,我为它制作了一个Python包,我想包含一些样本数据集,但是我不想直接将所有的数据集都包含在Python包中,因为它会使不使用它们的人的安装速度变慢。

我想要的行为是,当引用一个示例数据集时,它会自动从URL下载并保存到本地包中,但是下一次使用它时,它将读取本地版本而不是重新下载。对于我的包,这个缓存应该是永久的,而不仅仅是Python实例的过程。

我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-20 01:25:50

最后,我使用AppData包在appdirs下创建了一个文件夹

datasets.py

代码语言:javascript
复制
import os
import pandas as pd
from pandasgui.utility import get_logger
from appdirs import user_data_dir
from tqdm import tqdm

logger = get_logger(__name__)

__all__ = ["all_datasets",

           "country_indicators",
           "us_shooting_incidents",
           "diamonds",
           "pokemon",
           "anscombe",
           "attention",
           "car_crashes",
           "dots",
           "exercise",
           "flights",
           "fmri",
           "gammas",
           "geyser",
           "iris",
           "mpg",
           "penguins",
           "planets",
           "tips",
           "titanic",
           "gapminder",
           "stockdata"]

dataset_names = [x for x in __all__ if x != "all_datasets"]

all_datasets = {}

root_data_dir = os.path.join(user_data_dir(), "pandasgui", "dataset_files")

# Open local data CSVs if they exists
if all([os.path.exists(os.path.join(root_data_dir, f"{name}.csv")) for name in dataset_names]):
    for name in dataset_names:
        data_path = os.path.join(root_data_dir, f"{name}.csv")

        if os.path.isfile(data_path):
            all_datasets[name] = pd.read_csv(data_path)

# Download data if it doesn't exist locally
else:
    os.makedirs(root_data_dir, exist_ok=True)

    logger.info(f"Downloading PandasGui sample datasets into {root_data_dir}...")
    pbar = tqdm(dataset_names, bar_format='{percentage:3.0f}% {bar} | {desc}')
    for name in pbar:
        pbar.set_description(f"{name}.csv")

        data_path = os.path.join(root_data_dir, f"{name}.csv")

        if os.path.isfile(data_path):
            all_datasets[name] = pd.read_csv(data_path)
        else:
            all_datasets[name] = pd.read_csv(
                os.path.join("https://raw.githubusercontent.com/adamerose/datasets/master/",
                             f"{name}.csv"))

            all_datasets[name].to_csv(data_path, index=False)

# Add the datasets to globals so they can be imported like `from pandasgui.datasets import iris`
for name in all_datasets.keys():
    globals()[name] = all_datasets[name]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62972802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档