python - 如何使用 Pandas 或 Requests 在 Python 中访问私有(private) Github Repo 文件 (.csv)

标签 python pandas git csv private

我不得不将我的公共(public) Github 存储库切换为私有(private)并且无法访问文件,而不是使用公共(public) Github 存储库能够访问的访问 token 。

我可以使用 curl 访问我的私有(private)仓库的 CSV:
'''
curl -s https://{token}@raw.githubusercontent.com/username/repo/master/file.csv

'''

但是,我想在我的 python 文件中访问这些信息。当 repo 公开时,我可以简单地使用:
'''
网址 = ' https://raw.githubusercontent.com/username/repo/master/file.csv '
df = pd.read_csv(url, error_bad_lines=False)

'''

由于 repo 是私有(private)的,这不再有效,而且我找不到在 python 中下载此 CSV 而不是从终端 pull 的解决方法。

如果我尝试:
'''
requests.get(https://{token}@raw.githubusercontent.com/username/repo/master/file.csv)
'''
我收到 404 响应,这与 pd.read_csv() 发生的事情基本相同。如果我单击原始文件,我会看到创建了一个临时 token 并且 URL 是:
'''
https://raw.githubusercontent.com/username/repo/master/file.csv?token=TEMPTOKEN
'''
有没有办法附加我的永久私有(private)访问 token ,以便我可以随时从 github 中提取这些数据?

最佳答案

是的,您可以在 Python 中下载 CSV 文件,而不是从终端 pull 。为了实现这一点,您可以使用带有“请求”和“io”模块帮助的 GitHub API v3。下面的可重现示例。

import numpy as np
import pandas as pd
import requests
from io import StringIO

# Create CSV file
df = pd.DataFrame(np.random.randint(2,size=10_000).reshape(1_000,10))
df.to_csv('filename.csv') 

# -> now upload file to private github repo

# define parameters for a request
token = 'paste-there-your-personal-access-token' 
owner = 'repository-owner-name'
repo = 'repository-name-where-data-is-stored'
path = 'filename.csv'

# send a request
r = requests.get(
    'https://api.github.com/repos/{owner}/{repo}/contents/{path}'.format(
    owner=owner, repo=repo, path=path),
    headers={
        'accept': 'application/vnd.github.v3.raw',
        'authorization': 'token {}'.format(token)
            }
    )

# convert string to StringIO object
string_io_obj = StringIO(r.text)

# Load data to df
df = pd.read_csv(string_io_obj, sep=",", index_col=0)

# optionally write df to CSV
df.to_csv("file_name_02.csv")

关于python - 如何使用 Pandas 或 Requests 在 Python 中访问私有(private) Github Repo 文件 (.csv),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62164400/

相关文章:

python - 在 NumPy 中高效计算给定向量元素的所有成对乘积

python - 拆分数据框中的单元格

Python Pandas : differences between two dates in weeks?

git - 如何将 git 存储库用作 svn :external?

javascript - 使用 Husky 设置预推送钩子(Hook)以防止推送到 master 分支

python - 如何根据当前行的条件获取 pandas GroupBy Dataframe 的前几行?

python - 使用类作为另一个类的方法的装饰器

python - 从页面中检索请求 header

python - pandas DataFrame 爆炸列内容

git - 将 Visual Studio 扩展回滚到早期版本