4

テキストファイルからリストまたはリストのリストを読み取って作成したいと思います。

たとえば、「mylist.txt」というファイルがあります。

mylist = [
1,
2,
3,
4]

myotherlist = [
 [1, 3, 4, 5],
 [3, 5, 3, 6]
]

そのテキストファイルを読んで、Pythonスクリプトで使用したいと思います。

それは可能ですか?上記の例をPython構文で使用しています。私の目標は、自分で構文解析ロジックを記述しないようにすることです。そして、XMLは私の目的には複雑すぎるようです。

ありがとうございました。

4

4 に答える 4

4

次のデータファイル(data.txt)がある場合:-

[1,2,3,4]

次に、このコードはそれをリストに読み込みます。

from ast import literal_eval

with open('data.txt') as fsock:
   mylist = literal_eval( fsock.read() )

これは、辞書などの他のデータ型でも機能します。詳細については、 literal_evalのドキュメントを参照してください。

于 2012-12-21T23:52:44.210 に答える
2

リストのリストの場合は、mylists.txtファイルで「まっすぐに」定義する必要があります。

例えば

MYLISTS = [
    [1, 2, 3],
    [2, 3, 4],
    ...
]

そして、mylists.txtの名前をmylists.pyに変更します。

次に、同じディレクトリにある別のPythonスクリプトを使用して、次のことを実行できます。

import mylists
for sublist in mylists.MYLIST:
    for elem in sublist:
        ....

これはあなたの側で解析コードを必要とせず、Pythonの「データ」ファイルも非常に簡単に手作業で編集できます。

于 2012-12-21T23:56:51.687 に答える
1

あなたがの形で何かを持っているなら[1, 2, 3, 4]、その場合あなたは使うことができますast

In [1]: import ast

In [2]: with open('lists.txt', 'rb') as f:
   ...:     lists = f.readlines()
   ...:     
   ...:     

In [3]: list_container = [ast.literal_eval(line.strip()) for line in lists]

In [4]: list_container
Out[4]: [[1, 2, 3], [[1, 2, 3], [4, 5, 6]]]

この場合、lists.txt次のようになります。

[1, 2, 3]
[[1, 2, 3], [4, 5, 6]]

ただし、ファイルが上記のように表示される場合は、を使用できますが、次のようなexecものは常に注意して使用する必要があります。execeval

In [2]: with open('test.txt', 'rb') as f:
   ...:     contents = f.read()
   ...:     
   ...:     

In [3]: exec(contents)

In [4]: mylist
Out[4]: [1, 2, 3, 4]

In [5]: myotherlist
Out[5]: [[1, 3, 4, 5], [3, 5, 3, 6]]

In [6]: print contents
mylist = [
1,
2,
3,
4]

myotherlist = [
 [1, 3, 4, 5],
 [3, 5, 3, 6]
]
于 2012-12-21T23:55:29.083 に答える
1

リストをテキストとしてファイルに保存してから読み戻すことを意味しているように思われるので、Strawberryのast例がおそらく最良です。ただし、よくわからない場合pickleは、バイナリシリアル化であるメソッドも破棄します。Pythonの外部での人間の可読性と移植性を犠牲にして、より小さなファイルとより速い読み取り/書き込み時間を生成します。

書くには:

import pickle # or cPickle

myList = [1, 2, 3, 4]

with open('data.txt', 'w') as f:
    pickle.dump(myList, f)

読むには:

import pickle

with open('data.txt', 'w') as f:
    myList = pickle.load(f)
于 2012-12-22T00:00:23.257 に答える