2

構造データをデータストリーム形式に変換してライブラリに渡す目的で cPickle を使用しています。私がしなければならないことは、手動で書かれたファイル名「targetstrings.txt」からファイルの内容を読み取り、ファイルの内容を次の方法でNetcdfライブラリが必要とする形式に変換することです。

注: targetstrings.txt にはラテン文字が含まれています

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

Netcdf ライブラリは、コンテンツを文字列として受け取ります。ファイルを読み込んでいるときに、次のエラーが発生しました。

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

このエラーを修正する方法を教えてください。ググってみましたが、適切な解決策が見つかりませんでした。

助言がありますか、

4

2 に答える 2

2

pickle は一般的なテキスト ファイルの読み取り/書き込み用ではなく、Python オブジェクトをファイルにシリアル化/逆シリアル化するためのものです。テキスト データを読みたい場合は、Python の通常の IO 関数を使用する必要があります。

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
于 2012-04-25T12:54:19.667 に答える
0

述べたように - Pickle はこのように使用するためのものではありません。複雑な Python オブジェクトを手動で編集し、Python オブジェクトとして読み取って別の関数に渡す必要がある場合は、XML、JSON、Python ファイル自体など、他の多くの形式を使用できます。Pickle は Python 固有のプロトコルを使用します。注記はバイナリ (プロトコルのバージョン 0) であり、Python のバージョン間で変更されませんが、これを意図したものではなく、永続化または通信のために Python オブジェクトを記録するための推奨される方法でもありません。 (ただし、それらの目的に使用できます)。

于 2012-04-25T13:28:55.543 に答える