2016-04-27 10 views
0

私は先にPython辞書を作成し、それをテキスト形式で保存しました。ファイルのサイズは16MBです。私はAST大きい(16MB)のPython辞書の読み込み中にエラーが発生しました

f = "dictionaryInTextFile" 
fileToRead = open(f, 'r') 
Object = fileToRead.read() 
fileToRead.close() 

ObjectDict = ast.literal_eval(Object) 

を使用して、それをロードしようとすると、私は辞書の一部をロードしようとしたとき、それが正常にロードされますが、私は次のエラー

eTraceback (most recent call last): 
File "somename.py", line 46, in <module> 
    ObjectDict = ast.literal_eval(Object) 
File "/usr/lib/python2.7/ast.py", line 49, in literal_eval 
    node_or_string = parse(node_or_string, mode='eval') 
File "/usr/lib/python2.7/ast.py", line 37, in parse 
    return compile(source, filename, mode, PyCF_ONLY_AST) 
File "<unknown>", line 1 

を取得します。

辞書のサイズに問題がありますか、またはテキストファイルから辞書を解析する際に問題がありますか?解決するために何ができますか?

+1

トレースバックの一部が欠落しているようです。 –

+0

ファイルをどのように作成しましたか?あなたのコードは小さな辞書で動作しますか? – martineau

+0

エラーの種類とメッセージが省略されているようです。エラー原因の診断には多少重要です。 –

答えて

0

いいえ、ast.literal_evalでロードされた辞書には特定のサイズ制限はありません。

ただし、辞書に含まれる可能性のあるキーと値には制限があります。 the documentationを引用:文字列、数値、タプル、リスト、dicts、ブール値、およびなし:

た文字列またはノードは、次のPythonのリテラルの構造からなるものであってもよいです。

あなたの辞書に上記の種類以外のものが含まれているとします。

可能な限り、ファイルを半分に分割し、両方の半分が有効な辞書であることを確認するために必要な句読点を追加します。両方の半分に対してast.literal_eval()を実行してください。そのうちの1人が例外を発生させた場合は、半分にカットしてプロセスを繰り返します。すぐに問題の場所を知ることができます。

+0

これは答えではないので、コメントとして投稿した方が良いでしょう。 – martineau

+0

これは確かに答えです。 Q:「辞書のサイズに問題はありますか?」 A: "いいえ、辞書のサイズ制限はありません"、Q: "辞書の解析中に問題がありますか?" A: "あなたの辞書には上記の種類以外のものが含まれていると思います。あなたのコメントが投稿された後に編集されたQ:「私はそれを解決するために何ができますか?」 A:入力ファイルに対してバイナリ検索を使います。 –

関連する問題