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)
这就是最终对我有用的东西 - 如果有人遇到同样的问题,请将其留在这里。谢谢您的帮助!
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)
| 归档时间: |
|
| 查看次数: |
12792 次 |
| 最近记录: |