Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:初始值必须是str或None,而不是bytes(bigquery)_Python_Google Bigquery - Fatal编程技术网

Python TypeError:初始值必须是str或None,而不是bytes(bigquery)

Python TypeError:初始值必须是str或None,而不是bytes(bigquery),python,google-bigquery,Python,Google Bigquery,我使用的是python3.5,我使用python()通过bigquery创建了bigquery客户端 代码如下: from bigquery import get_client PROJECT_ID = 'api-project-xxxxxx' SERVICE_ACCOUNT = 'xxxx@api-project-xxxx.iam.gserviceaccount.com' PRIVATE_KEY_PATH = 'xxxx.p12' with open(PRIVATE_KEY_PATH, '

我使用的是python3.5,我使用python()通过bigquery创建了
bigquery客户端

代码如下:

from bigquery import get_client

PROJECT_ID = 'api-project-xxxxxx'
SERVICE_ACCOUNT = 'xxxx@api-project-xxxx.iam.gserviceaccount.com'
PRIVATE_KEY_PATH = 'xxxx.p12'

with open(PRIVATE_KEY_PATH, 'rb') as f:
     private_key = f.read()

client = get_client(PROJECT_ID,private_key=private_key,service_account=SERVICE_ACCOUNT,readonly=True)
我得到以下错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-181-858afcfa416a> in <module>()
----> 1 client = get_client(PROJECT_ID,private_key=private_key,service_account=SERVICE_ACCOUNT,readonly=True)
/Users/XXXXXX/.pyenv/versions/anaconda3-2.4.0/lib/python3.5/site-packages/bigquery/client.py in get_client(project_id, credentials, service_url, service_account, private_key, private_key_file, json_key, json_key_file, readonly, swallow_results)
    131         credentials = _credentials().from_p12_keyfile_buffer(
    132             service_account,
--> 133             StringIO(private_key),
    134             scopes=scope)
    135 
TypeError: initial_value must be str or None, not bytes
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1客户端=获取客户端(项目ID,私钥=私钥,服务帐户=服务帐户,只读=真)
/get_client中的Users/XXXXXX/.pyenv/versions/anaconda3-2.4.0/lib/python3.5/site-packages/bigquery/client.py(项目id、凭证、服务url、服务帐户、私钥、私钥文件、json_密钥、json_密钥文件、只读、结果)
131凭据=\u凭据()。来自\u p12\u密钥文件\u缓冲区(
132服务单位帐户,
-->133 StringIO(私钥),
134范围=范围)
135
TypeError:初始值必须是str或None,而不是bytes

StringIO
str
对象转换为流。您需要传递一个
str
,但是
private\u key
是一个字节对象,因为您正在以二进制模式读取文件。试试这个:

with open(PRIVATE_KEY_PATH, 'r') as f:
     private_key = f.read()

其余代码保持不变。

谢谢您的回复。但出现另一个错误:
UnicodeDecodeError:“ascii”编解码器无法解码位置1中的字节0x82:序号不在与此无关的范围(128)
@TsuyoshiEndo。你能再问一个问题吗?好的。谢谢!我确认p12文件不正确。所以,我使用了正确的文件,没有错误。@TsuyoshiEndo啊,很高兴听到这个消息。如果你觉得它有帮助,请考虑接受。谢谢