使用Python读取Bitbucket上的CSV文件转df,现有代码返回错误数据如何解决
解决方案:Python直接读取Bitbucket私有仓库CSV为DataFrame
问题根因
你当前直接向pd.read_csv()传入Bitbucket URL的方式未携带身份认证信息,私有仓库会返回身份验证页面而非CSV源数据,因此读取结果为异常内容。
正确实现代码
全程仅在内存中处理数据,不会生成本地文件:
import pandas as pd import requests from io import StringIO import os # 配置信息 csv_url = 'https://bitbucket.EXAMPLE.com/EXAMPLE/EXAMPLE/EXAMPLE/EXAMPLE/raw/wpcProjects.csv?at=refs%2Fheads%2Fmaster' colnames = ['project_id','project_name','gourmet_url'] # 建议从环境变量读取账号信息,不要硬编码到代码中 bitbucket_username = os.getenv('BITBUCKET_USERNAME') # 优先使用Bitbucket应用密码(仅开通仓库只读权限即可,更安全),不要用账号登录密码 bitbucket_app_password = os.getenv('BITBUCKET_APP_PASSWORD') # 发起带认证的请求拉取CSV内容 response = requests.get( csv_url, auth=(bitbucket_username, bitbucket_app_password) ) # 校验请求是否成功 response.raise_for_status() # 直接从内存读取内容为DataFrame,不生成本地文件 # 如果CSV自带表头,请删除names参数,避免把原表头识别为数据行 df7 = pd.read_csv(StringIO(response.text), names=colnames)
常见调整项
- 如果你的CSV文件本身自带表头,去掉
pd.read_csv()中的names参数即可,避免覆盖原有表头 - 如果是公开仓库无需认证,直接去掉
requests.get()中的auth参数即可 - 若CSV编码特殊,可在
pd.read_csv()中新增encoding参数指定编码格式(如encoding='utf-8'、encoding='gbk')
内容的提问来源于stack exchange,提问作者Rami Shehadah
相关产品推荐
相关产品推荐

