我对 Python 很陌生,我正在从事的项目的总体目标是设置一个 SQLite 数据库,以便将来非程序员可以轻松进入(这是为一小群技术能力强的人准备的) )。我现在尝试完成此操作的方法是让人们通过简单的文本编辑器将他们的新数据条目保存为 .py 文件,然后在将值输入 DB 的函数中打开该 .py 文件。到目前为止,我有:
def newEntry(material=None, param=None, value=None):
if param == 'density':
print('The density of %s is %s' % (material, value))
import fileinput
for line in fileinput.input(files=('testEntry.py'))
process(line)
然后我用一个简单的文本编辑器创建了一个名为 testEntry.py 的文件,当 newEntry 在终端中执行时,它有望被 newEntry.py 调用。这里的想法是,一些用户只需将函数名称与他们在括号内输入的参数一起放入。 testEntry.py 很简单:
# Some description for future users
newEntry(material='water', param='density', value='1')
当我在终端中运行 newEntry.py 时,什么也没有发生。是否有其他方法可以在我不知道的另一个中打开和执行 .py 文件?非常感谢您的帮助。
最佳答案
您的解决方案有效,但正如评论者所说,它非常不安全并且有更好的方法。假设您的 process(...)
方法只是执行一些任意 Python 代码,这可能被滥用来执行系统命令,例如删除文件(非常糟糕)。
而不是使用由一系列 newEntry(...)
组成的 .py 文件在每一行,让您的用户生成一个带有适当列标题的 CSV 文件。 IE。material,param,value
water,density,1
然后解析此 csv 文件以添加新条目:
with open('entries.csv') as entries:
csv_reader = csv.reader(entries)
header = True
for row in csv_reader:
if header: # Skip header
header = False
continue
material = row[0]
param = row[1]
value = row[2]
if param == 'density':
print('The density of %s is %s' % (material, value))
您的用户可以使用 Microsoft Excel、Google 表格或任何其他可以导出 .csv 文件的电子表格软件来创建/编辑这些文件,并且您可以为用户提供带有预定义标题的模板。
关于python-3.x - 在函数中打开另一个 .py 文件以在 Python3.5 中传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44839881/