Python 是";进口-数据蟒蛇?

Python 是";进口-数据蟒蛇?,python,import,Python,Import,我有一个python脚本,它在“初始化”运行模式下访问系统上的多个文件,并汇编它认为正确的数据。当实际使用数据时,在将脚本设置为以“最终”模式运行之前,用户需要查看该数据 现在我正在以python数据结构的形式将要审阅的数据写入data.py文件,例如data.py的内容可以是: data1 = "script_generated_filename_1" data2 = [ "script_generated_date1", "script_generated_date2"

我有一个python脚本,它在“初始化”运行模式下访问系统上的多个文件,并汇编它认为正确的数据。当实际使用数据时,在将脚本设置为以“最终”模式运行之前,用户需要查看该数据

现在我正在以python数据结构的形式将要审阅的数据写入data.py文件,例如data.py的内容可以是:

data1 = "script_generated_filename_1"

data2 = [ "script_generated_date1",
          "script_generated_date2" ]
用户验证data.py文件后,“最终”运行模式使用“导入数据”调用,通过data.data1、data.data2等访问数据


我一直在尝试清理我的python编程风格,并且更符合一般认为的python风格。阅读完这些文档后,我怀疑以这种方式使用导入函数是否是pythonic的,或者是否有更主流的方式使用python来完成这种类型的用户验证。

我认为您应该将数据放在文本文件(JSON、CSV,任何合适的)中,然后让脚本读取它。通常(不仅仅是在Python中),最好将代码和数据分开。

这对于模块来说是一件很好的事情。您要避免的是在导入时执行的代码太多或有副作用,但这并不能做到这一点。

据我所知,您的代码没有任何不符合pythonic的地方:您正确地导入名称空间并引用它们,并且将模块视为重用单元

可能会有一个更优雅的解决方案,如果你能发布关于问题域的更具体的细节,我们可能会帮助你。但优雅往往必须与经济相抵消


我的务实观点是,如果你没有重复自己,没有打破任何主要惯例,并且你的代码正常工作,那么你是对的:即使设计有缺陷,一个好的设计总是可以在以后强加给一个有缺陷的枯燥的设计;)

这并不总是正确的。解析开销,更不用说编写和维护解析器代码了,与将这些数据存储在文本文件中的感知和实际好处相比,这是一项必须权衡的成本。@dorkitude:编写自己的解析器未免有些过头了,没错。但对于许多可行的数据格式选择,标准库中有解析器和序列化器,而对于其他库,则有广泛使用和维护的开放源代码库。初始化代码的解析开销应该是可以忽略的。@delnan:你是对的,但这并不意味着它应该作为一个选项被单方面放弃。我还想指出,JSON并不比Python的原语更方便(事实上,我认为它不太方便,因为它后面有逗号)。最后,对数据使用Python还有一个额外的好处,那就是在编译时而不是运行时捕获数据格式错误。@dorkitude:但我不是说不应该考虑它。我只是在扮演“魔鬼代言人”的角色,揭穿薄弱的论点。@dorkitude:“最后,对数据使用Python还有一个额外的好处,那就是在编译时而不是运行时捕获数据格式错误。”在这种情况下,这并不是一个真正的好处,因为要么模块的编译时间与配置文件的解析时间基本相同,要么用户的生活变得更加复杂——也就是说,在以前没有编译时间的情况下,我们增加了编译时间的概念:)这是真的。在模块主体中初始化数据的好处在于,您可以在以后随意更改它——比如读取(可能解析)外部文件,而不是像OP在他的示例中那样使用Python文本。另一个特点是,这只会在模块第一次升级时自动发生。@martineau:interest perspective。我认为在导入时读取文件是不可能的!唯一的问题是尺寸。我做了一次,创建了一个包含42000行代码的模块。导入有点慢。但一旦进口,它就运行得非常快。它有一个非常简单的API<代码>导入_big_数据集;_big_dataset.lookup[some_key]@Ned Batchelder:您反对在导入时读取文件的具体理由是什么?@S.Lott:第一次导入模块后,该模块是否会转换为.pyc文件(并且以后再次导入时不需要再次读取所有42K行)?