【问题标题】:dvc.api.read() raises an "UnicodeDecodeError"dvc.api.read() 引发“UnicodeDecodeError”
【发布时间】:2021-08-11 13:32:25
【问题描述】:

我正在尝试访问 DICOM 文件 [以医学数字成像和通信 (DICOM) 格式保存的图像]:

import dvc.api

path = 'dir/image.dcm'
remote = 'remote_name'
repo = 'git_repo'
mode = 'r'

data = dvc.api.read(path = path, remote = remote, repo = repo, mode = mode)

运行之前的代码,“下载进度条”完成后,出现如下错误:

Traceback (most recent call last): File "draft.py", line 7, in <module> mode ='r') File "C:\Users\lbrandao\anaconda3\envs\my_env\lib\site-packages\dvc\api.py", line 91, in read return fd.read() File "C:\Users\lbrandao\anaconda3\envs\my_env\lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0] UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 764: character maps to <undefined>

我试图通过使用编码参数来解决这个问题:

data = dvc.api.read(path = path, remote = remote, repo = repo, mode = mode, encoding='ANSI')

因为,当我使用 Notepad++ 打开 DICOM 文件时,这是指定的编码。但是,它会引发错误:

Exception ignored in: <bound method Pool.__del__ of <dvc.fs.pool.Pool object at 0x0000021D1347A160>> Traceback (most recent call last): File "C:\Users\lbrandao\anaconda3\envs\my_env\lib\site-packages\dvc\fs\pool.py", line 42, in __del__ File "C:\Users\lbrandao\anaconda3\envs\my_env\lib\site-packages\dvc\fs\pool.py", line 46, in close File "C:\Users\lbrandao\anaconda3\envs\my_env\lib\site-packages\dvc\fs\ssh\connection.py", line 71, in close File "C:\Users\lbrandao\anaconda3\envs\my_env\lib\site-packages\paramiko\sftp_client.py", line 194, in close File "C:\Users\lbrandao\anaconda3\envs\my_env\lib\site-packages\paramiko\sftp_client.py", line 185, in _log File "C:\Users\lbrandao\anaconda3\envs\my_env\lib\site-packages\paramiko\sftp.py", line 158, in _log File "C:\Users\lbrandao\anaconda3\envs\my_env\lib\logging\__init__.py", line 1372, in log File "C:\Users\lbrandao\anaconda3\envs\my_env\lib\logging\__init__.py", line 1441, in _log File "C:\Users\lbrandao\anaconda3\envs\my_env\lib\logging\__init__.py", line 1411, in makeRecord TypeError: 'NoneType' object is not callable

我也试过encoding = 'utf-8',但是“UnicodeDecodeError”还是继续出现:

Traceback (most recent call last): File "draft.py", line 7, in <module> mode ='r', encoding='utf-8') File "C:\Users\lbrandao\anaconda3\envs\ccab_env_dev\lib\site-packages\dvc\api.py", line 91, in read return fd.read() File "C:\Users\lbrandao\anaconda3\envs\ccab_env_dev\lib\codecs.py", line 321, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 140: invalid continuation byte

有人可以帮忙吗?谢谢。

【问题讨论】:

  • @Ibrando 你以后如何处理它?你不应该使用rb模式吗?
  • @don_pablito 我再次运行代码,这次使用 mode='rb',但出现错误 TypeError: 'NoneType' object is not callable ...
  • 这听起来像是一个错误,你能在 github 上创建问题吗? github.com/iterative/dvc/issues

标签: python encoding dvc


【解决方案1】:

我不熟悉 dvc.api,但是很多处理 DICOM 的人使用 pydicom 或 simpleITK。我编写了一个库,可以使用 (cleanX) 获取大部分数据,您可以查看 an example notebook here

【讨论】:

  • 使用 dvc.api.read() 的范围只是将数据文件从 DVC 远程检索/流式传输到 Python 脚本。只有之后才能使用 Pydicom 等进行进一步的操作。
猜你喜欢
  • 2013-10-11
  • 1970-01-01
  • 2012-08-08
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 2016-02-08
  • 2017-09-26
相关资源
最近更新 更多