有没有办法将 csv 文件从 github 自动导入我的 jupyter notebook

YoD*_*oDa 1 python web-scraping data-science

我是一个初学者,我正在开发一个代码来可视化冠状病毒在全球的传播,我想从GitHub 存储库(csse_covid_19_data中提取 .csv 文件,其中每 2 天上传一个新的 .csv 文件。是否可以将最新的 csv 文件自动导入笔记本,而不是手动下载文件?

我试过抓取数据,但没有帮助

import requests

url = 'https://github.com/CSSEGISandData/COVID-19/blob/master/csse_covid_19_data/csse_covid_19_daily_reports/03-08-2020.csv'
response = requests.get(url)
print(response.text)
Run Code Online (Sandbox Code Playgroud)

Sha*_*ain 7

解决方案1:

此解决方案特定于您的用例:

使用以下命令安装PyGithubpip

!pip install PyGithub
Run Code Online (Sandbox Code Playgroud)

从此页面生成 Github API 令牌Generate new token,方法是在以下代码中单击该令牌并将该令牌作为字符串传递,token以建立与 Github 的连接:

from github.MainClass import Github
g = Github(token)
Run Code Online (Sandbox Code Playgroud)

现在您已使用您的凭据连接到 Github,您可以访问您的所有存储库内容以及其他公共存储库。

加载CSV存储文件的存储库:

repo = g.get_repo("CSSEGISandData/COVID-19")
Run Code Online (Sandbox Code Playgroud)

获取存储在文件存储目录中的CSV文件的对象列表:

file_list = repo.get_contents("csse_covid_19_data/csse_covid_19_daily_reports")
Run Code Online (Sandbox Code Playgroud)

由于存储这些CSV文件的目录也包含一个.gitignore文件,一个README.md文件和文件命名的格式为“mm-dd-yyyy”,所以README.md出现在最后,最后一秒的文件是你最新更新的文件。要访问它,请运行以下代码:

github_dir_path = 'https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_daily_reports/'
file_path = github_dir_path  + str(file_list[-2]).split('/')[-1].split(".")[0]+ '.csv'
Run Code Online (Sandbox Code Playgroud)

使用read_csv()pandas的方法从指定路径加载数据。

import pandas as pd
df = pd.read_csv(file_path, error_bad_lines=False)
Run Code Online (Sandbox Code Playgroud)

解决方案2:

如果您想手动指定路径,请尝试以下代码:

通过右键单击raw如下所示从 Github 获取 CSV 文件的路径并将其值分配给file_path

在此处输入图片说明

file_path = 'https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_daily_reports/03-08-2020.csv'
Run Code Online (Sandbox Code Playgroud)

使用read_csv()pandas的方法从指定路径加载数据:

import pandas as pd
df = pd.read_csv(file_path, error_bad_lines=False)
Run Code Online (Sandbox Code Playgroud)

解决方案3:

如果要自动指定路径,请尝试以下代码:

设置您想要刷新代码的时间并将下面给出的解决方案与之集成。

由于您知道存储最新文件的目录以及将新文件添加到该目录的频率,您只需以 mm-dd-yyyy 格式动态更改当前日期的日期:

from datetime import date
file_date = str(date.today().strftime('%m-%d-%Y'))
file_date
Run Code Online (Sandbox Code Playgroud)

输出: 03-11-2020

同样,如果要为昨天的日期运行代码,只需更改 file_date 的值:

from datetime import date, timedelta
file_date = str((date.today() - timedelta(days = 1)).strftime('%m-%d-%Y'))
file_date
Run Code Online (Sandbox Code Playgroud)

输出: 03-10-2020

由于当前在该目录中,最后上传的文件是 2020 年 3 月 9 日,因此我们将使用该日期:

from datetime import date, timedelta
file_date = str((date.today() - timedelta(days = 2)).strftime('%m-%d-%Y'))
file_date
Run Code Online (Sandbox Code Playgroud)

输出: 03-09-2020

动态生成 file_path:

github_dir_path = 'https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_daily_reports/'
file_path = github_dir_path  + file_date + '.csv'
Run Code Online (Sandbox Code Playgroud)

使用read_csv()pandas的方法从指定路径加载数据。

import pandas as pd
df = pd.read_csv(file_path, error_bad_lines=False)
Run Code Online (Sandbox Code Playgroud)