5

テキストファイルの宣言からスクリプト内で変数を簡単に割り当てることができるかどうかを知る必要があります。基本的に、ユーザーがソースコードをいじることなく、必要な数に一致するようにテキストファイルを介して変数を変更できるようにしたいと思います。

テキストファイルの入力形式:

faultInfo = [
             [["L1603",1,5],[271585,972739],[272739,872739, 272739,972739, 271585,972739, 271585,272389, 270999,272389]],
             [["L1605",1,5],[271897,872739],[272739,872739, 272739,972739, 271891,872739, 271891,272119, 270963,272119]],
             [["L1607",1,4],[271584,272738],[271584,272738, 271584,272388, 270998,272388, 270998,272386]]
            ]

これをスクリプト内の同じ名前のリスト変数にロードしたいだけです。私はPythonを初めて使用し、CS専攻などではありません。ループなどを使用して3Dリストをロードできることは知っていますが、k番目の次元のサイズがギザギザになっていて、ケースごとに変わるため、これを行う簡単な方法があるはずです。

前もって感謝します。

ありがとう

4

3 に答える 3

2

json.loadsこのデータは、またはast.literal_eval(両方とも標準ライブラリ内)を使用して解析できるほど単純に見えます。

>>> a = """[
...              [["L1603",1,5],[271585,972739],[272739,872739, 272739,972739, 271585,972739, 271585,272389, 270999,272389]],
...              [["L1605",1,5],[271897,872739],[272739,872739, 272739,972739, 271891,872739, 271891,272119, 270963,272119]],
...              [["L1607",1,4],[271584,272738],[271584,272738, 271584,272388, 270998,272388, 270998,272386]]
...             ]
... 
... """
>>> import ast
>>> ast.literal_eval(a)
[[['L1603', 1, 5], [271585, 972739], [272739, 872739, 272739, 972739, 271585, 972739, 271585, 272389, 270999, 272389]], [['L1605', 1, 5], [271897, 872739], [272739, 872739, 272739, 972739, 271891, 872739, 271891, 272119, 270963, 272119]], [['L1607', 1, 4], [271584, 272738], [271584, 272738, 271584, 272388, 270998, 272388, 270998, 272386]]]
>>> import json
>>> json.loads(a)
[[[u'L1603', 1, 5], [271585, 972739], [272739, 872739, 272739, 972739, 271585, 972739, 271585, 272389, 270999, 272389]], [[u'L1605', 1, 5], [271897, 872739], [272739, 872739, 272739, 972739, 271891, 872739, 271891, 272119, 270963, 272119]], [[u'L1607', 1, 4], [271584, 272738], [271584, 272738, 271584, 272388, 270998, 272388, 270998, 272386]]]

文字列(a私の例では)は次の場所から簡単に取得できますfile.read()

于 2012-09-11T17:30:14.940 に答える
2

単一の.pyファイルを作成できます。たとえば、configuration.pyamdがこの変数をこのファイルに入れます。ユーザーがこの変数の数値を変更したい場合は、単純なテキストエディターでこのファイルを開き、faultInfo宣言を修正するだけです。

于 2012-09-11T17:27:47.070 に答える
0

eval()割り当てを省略した場合、それを行うための迅速で汚い方法は、関数を使用することです。たとえば、ファイルの場合、次のようになりますparam.txt

 [
     [["L1603",1,5],[271585,972739],[272739,872739, 272739,972739, 271585,972739, 271585,272389, 270999,272389]],
     [["L1605",1,5],[271897,872739],[272739,872739, 272739,972739, 271891,872739, 271891,272119, 270963,272119]],
     [["L1607",1,4],[271584,272738],[271584,272738, 271584,272388, 270998,272388, 270998,272386]]
 ]

それをロードする簡単な方法(私が汚いと言ったように)は次のようになります:

with open('param.txt') as f:
    file_text = ' '.join(f.readlines()) #Join lines with a blank ' ' space
parameter = eval(file_text)
于 2012-09-11T17:30:02.830 に答える