Я создал функцию загрузки для чтения файла. Моя проблема в том, что данные - это массив, который мне нужно декодировать.

def load(input_file):
    f = open(input_file,"rb")
    if f.mode == "rb":
       contents = f.read()
       print(contents)

load('/path/data/text.txt')

Результаты следующие, что мне нужно декодировать

b'\xc3\x84\x03cjoblib.numpy_pickle\nNumpyArrayWrapper\nq\x00)\
    xc3\x85q\x01}q\x02(X\x08\x00\x00\x00subclassq
    \x03cnumpy\nndarray\nq\x04X\x05\x00\x00
0
Annalix 26 Июн 2019 в 20:39

3 ответа

Лучший ответ

Похоже, ваш файл содержит pickle данные.

Предполагая, что вы доверяете файлу, вы можете загрузить его с помощью pickle.load:

arr = pickle.loads(content)

Однако имейте в виду, что загрузка маринованного контента является супер опасной, поэтому убедитесь, что вы можете полностью доверять файлу (например, вы знаете, что вы создали его, и он не был переделано) перед загрузкой).

pickle может быть полезным в некоторых случаях, например, при обмене данными между двумя отдельными процессами Python.

Другой вариант: поскольку похоже, что вы храните массив numpy, было бы лучше и проще (может быть, быстрее) использовать numpy tofile.

arr = numpy.arange(10)
arr.tofile('array.bin')

loaded_arr = numpy.fromfile('array.bin', numpy.int)
1
Nikolas Stevenson-Molnar 27 Июн 2019 в 02:41

Вы упускаете условное и не входите в него. содержимое должно быть под оператором if

def load(input_file):
    f = open(input_file,"rb")
    if f.mode == "rb":
        contents = f.read()
        print(contents)

load('/path/data/text.txt')
1
Vaibhav Sharma 27 Июн 2019 в 02:13

Похоже, что данные представляют собой рассол Python, вы должны использовать модуль рассола для загрузки

pickle.load(input_file)
2
Iain Shelvington 27 Июн 2019 в 02:15