如何使用 Pandas 或 Request 在 Python 中访问私有 Github 存储库文件 (.csv)

eve*_*tt7 12 python csv git private pandas

我必须将公共 Github 存储库切换为私有,并且无法访问文件,无法使用我可以使用公共 Github 存储库访问的访问令牌。

我可以使用curl访问我的私人存储库的CSV:'''curl -s https://{token}@raw.githubusercontent.com/username/repo/master/file.csv

'''

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

'''

现在,由于存储库是私有的,这不再有效,而且我找不到解决方法来在 python 中下载此 CSV,而不是从终端拉取。

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

小智 8

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

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")
Run Code Online (Sandbox Code Playgroud)


eve*_*tt7 3

这就是最终对我有用的东西 - 如果有人遇到同样的问题,请将其留在这里。谢谢您的帮助!

    import json, requests, urllib, io

    user='my_github_username'
    pao='my_pao'

    github_session = requests.Session()
    github_session.auth = (user, pao)

    # providing raw url to download csv from github
    csv_url = 'https://raw.githubusercontent.com/user/repo/master/csv_name.csv'

    download = github_session.get(csv_url).content
    downloaded_csv = pandas.read_csv(io.StringIO(download.decode('utf-8')), error_bad_lines=False)
Run Code Online (Sandbox Code Playgroud)