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 专业或任何其他专业。我知道我可以使用循环等加载 3-D 列表,但似乎应该有一种快速的方法来做到这一点,因为第 k 个维度的大小是锯齿状的,并且会因情况而异。

提前致谢。

谢谢

4

3 回答 3

2

您可以制作一个 .py 文件,例如configuration.pyamd 将此变量放入此文件中。如果用户想改变这个变量中的数字,他或她只需要通过简单的文本编辑器打开这个文件并更正 faultInfo 声明。

于 2012-09-11T17:27:47.070 回答
2

这些数据看起来很简单,您可以使用json.loadsast.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]]]

您可以轻松地afile.read()

于 2012-09-11T17:30:14.940 回答
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 回答