python-3.x - 在函数中打开另一个 .py 文件以在 Python3.5 中传递参数

标签 python-3.x sqlite

我对 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/

相关文章:

python - Cx-卡住错误 - Python 34

sql - 为什么 SQL 中-10/500 = 0?

javascript - 类型错误 : number is not a function - Phonegap Sqlite

python - 如何在 Flask 中获取 `request.form` 的数据?

python - 如何将存储为字符串的元组转换回元组再转换为字符串?

python - 如果我分别使用 pip 和 pip3 安装 virtualenv,默认值是多少?

python - 将多单词字符串拆分为包含字符串列表的 Pandas 系列的单个单词

python-3.x - 是否可以在 EFS 中可靠地使用 SQLite?

c# - 从 MMF 访问 SQLite 数据库

c# - Entity Framework 7 和 SQLite 表不创建