【问题标题】:Reading joblib file from Azure Blob in python在 python 中从 Azure Blob 读取 joblib 文件
【发布时间】:2021-10-05 05:45:08
【问题描述】:

我正在尝试从 Azure blob 读取 joblib 文件(请参阅下面的代码)。但是,我收到以下错误:

with open(filename, 'rb') as f:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9d in position 2: invalid start byte

代码:

from azure.storage.blob import BlobClient
import sklearn.externals
import joblib

blob_client = BlobClient.from_connection_string('connection_string', 'myContainer', 'myBlob.joblib')
downloaded_blob = blob_client.download_blob()
model = joblib.load(downloaded_blob.readall())

pickleloads() 工作正常。如何使用 joblib 实现相同的目标?

【问题讨论】:

    标签: python azure-blob-storage joblib


    【解决方案1】:

    读取文件包含特殊字符的问题

    Python 尝试将字节数组(它假定为 utf-8 编码字符串的字节)转换为 unicode 字符串 (str)。这个过程当然是按照utf-8规则进行解码。当它尝试这样做时,它会遇到一个 utf-8 编码字符串中不允许的字节序列(即位置 0 处的这个 0xff)。

    使用此解决方案,它将删除(忽略)字符并返回没有它们的字符串。仅当您需要剥离它们而不是转换它们时才使用它

    with open(path, encoding="utf8", errors='ignore') as value:
    

    使用errors='ignore' 你只会丢失一些字符。但是如果您不关心它们,因为它们似乎是源自连接到我的套接字服务器的客户端的错误格式和编程的额外字符。然后它是一个简单的直接解决方案。

    参考:https://docs.python.org/3/howto/unicode.html#the-unicode-type

    解决问题的另一种方法

    改变编码方式。另外,你可以在这里找到其他编码方法standard-encodings

    【讨论】:

    • 我的问题是 'downloaded_blob.readall()' 不是路径。如果我找到了我的 blob 的天蓝色路径(包括身份验证),那么您的解决方案肯定会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-06-01
    • 2021-10-18
    • 2012-06-16
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多