【问题标题】:python 3.6: Error: a bytes-like object is required, not 'str' when reading a filepython 3.6:错误:读取文件时需要一个类似字节的对象,而不是“str”
【发布时间】:2018-04-16 21:02:18
【问题描述】:

我正在尝试使用以下代码读取文件。

filenames = os.listdir(path)
    data = []
    for file in filenames:
        file_path = os.path.join(path, file)
        print (file_path)
        with open(file_path, 'r') as f:
            try:
                soundId = os.path.splitext(file)[0]
                print (soundId)
                content = f.read()
                pp = pickle.loads(content)
                pp = np.asarray(pp)            
                data[soundId] = pp
            except Exception as e:
                print ("Error occurred" + str(e))

当我运行它给我的代码时
发生错误需要一个类似字节的对象,而不是“str”

错误发生在pp = pickle.loads(content)这一行

还有其他类似问题的问题,但没有一个有帮助。

我正在尝试读取音频文件的 melspectogram 数据。 Sample file i am trying to read

我该如何解决这个问题?

【问题讨论】:

  • 'r' 更改为'rb'

标签: python python-3.x pickle


【解决方案1】:

with open(file_path, 'rb') as f: 而不是with open(file_path, 'r') as f:

或使用content.encode() 进行显式字节转换。

更新

您的问题与how-load-cv2-keypoint-and-descriptors-correctly-on-opencv-3-with-python-3有关

使用下面的代码,它应该可以工作:

# blues.00000.pp
import pickle, numpy as np
pp_list = np.fromfile('blues.00000.pp')
print('pp_list type :' + str(type(pp_list)))
pp = []
data = dict()
soundID = 'ppFile1'
for i in range(len(pp_list)):
    temp = pp_list[i] * 1
    pp.append(temp)
pp = np.asarray(pp)
print('pp data : ' + str(pp))
data[soundID] = pp
print('ppdata dic :' + str(data))

输出

pp_list type :<class 'numpy.ndarray'>
pp data : [4.56259939e+257 4.78104776e+180 9.28824150e+242 ... 1.00603813e+165
 6.01326204e-067 1.55998657e-259]
ppdata dic :{'ppFile1': array([4.56259939e+257, 4.78104776e+180, 9.28824150e+242, ...,
       1.00603813e+165, 6.01326204e-067, 1.55998657e-259])}

【讨论】:

  • 进行您建议的更改时出现此错误。错误发生'ascii' 编解码器无法解码位置 0 的字节 0xd8:序数不在范围内(128)
  • 我尝试了您建议的两种更改。在这两种情况下我都遇到了同样的错误。我正在尝试读取音频数据文件的 melspectogram
  • sys.getdefaultencoding() 是 'utf-8'
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 2017-08-31
  • 1970-01-01
相关资源
最近更新 更多