2012-04-25 2 views
2

Я работаю с cPickle, чтобы преобразовать данные структуры в формат потока данных и передать его в библиотеку. Дело в том, что я должен прочитать содержимое файла из написанного вручную имени файла «targetstrings.txt» и преобразовать содержимое файла в тот формат, который требуется библиотеке Netcdf, следующим образом:cPickle.load() error

Примечание: targetstrings.txt содержит латинский символы

op=open("targetstrings.txt",'rb') 
targetStrings=cPickle.load(op) 

Библиотека Netcdf принимает содержимое в виде строк. При загрузке файла он застрял со следующей ошибкой,

cPickle.UnpicklingError: invalid load key, 'A'. 

Скажите, пожалуйста, как я могу исправить эту ошибку, я гугле вокруг, но не нашли подходящего решения.

Любые предложения,

+1

Как генерируется 'targetstrings.txt'? – mgilson

+0

targetstrings.txt - созданный mannualy файл. Я хочу прочитать содержимое из этого файла и передать это содержимое в библиотеку – Saad

+0

«Библиотека Netcdf принимает содержимое как строки», то есть Netcdf хочет в качестве ввода списка строк, каждый из которых соответствует строке вашего входного файла? –

ответ

2

рассол не для чтения/записи общих текстовых файлов, но для сериализации/десериализации объектов Python в файл. Если вы хотите прочитать текстовые данные, вы должны использовать Python's usual IO functions.

with open('targetstrings.txt', 'r') as f: 
    fileContent = f.read() 

Если, как это кажется, библиотека просто хочет иметь список строк, принимая каждую строку как элемент списка, вы просто должны сделать:

with open('targetstrings.txt', 'r') as f: 
    lines=[l for l in f] 
# now in lines you have the lines read from the file 
+0

Да, я знаю это, но мне жаль, что я не передал свою проблему должным образом. На самом деле я прочитал содержимое файла и хочу передать это содержимое в библиотеку. Я узнал, что cPickle может преобразовать формат чтения содержимого файла в тот, который требуется библиотеке. я сделал то же самое, но застрял с ошибкой, как я упоминал выше. – Saad

+0

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

+0

соответственно изменились – Saad

0

Как указано - Пикель не предназначен для использования таким образом. Если вам нужно вручную редактировать сложные объекты Python, то taht должны быть прочитаны и переданы как объекты Python в другую функцию, есть много других форматов для использования - например, файлы XML, JSON, Python. Pickle использует специальный протокол Python, который, хотя примечание, являющееся двоичным (в версии 0 протокола) и не изменяющееся в версиях Python, не предназначено для этого, и даже не рекомендуемый метод для записи объектов Python для сохранения или связи (хотя он может быть использован для этих целей).

 Смежные вопросы

  • Нет связанных вопросов^_^