繁体   English   中英

如何将另一个 python 脚本 (.py) 导入到主 python 文件中

[英]How to import another python script (.py) into main python file

有没有办法将多个python文件导入一个主python文件?

我有一堆 py 文件,每个文件都必须在主 python 文件中运行,并将数据保存到 json 文件中。

这是我尝试过的,它给了我一个错误。

import light.py as light 

错误:

Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 2218, in  _find_and_load_unlocked
AttributeError: 'module' object has no attribute '__path__'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/pi/Desktop/majorproject/pillar1.py", line 8, in <module>
import sensorkey.py as sensorkey
ImportError: No module named 'sensorkey.py'; 'sensorkey' is not a package

我还尝试指定 py 文件的路径,但它也不起作用,并不断给出无效的语法错误。

import /home/pi/Desktop/json/light.py as light

更新:我设法修复了导入错误,但现在,在导入这个 light.py 文件后,我必须将字典(键)中的某些键打印到这个新文件中,然后将其导出到 json 文件。 我目前正在使用 TinyDB 来做到这一点。 这是我的代码:

from tinydb import TinyDB, Query
import json
from light import key

with open("/home/pi/Desktop/json/sensortestest.json", 'w+'):
    db = TinyDB('/home/pi/Desktop/json/sensortestest.json')
    table = db.table('Light')
    db.insert_multiple([{'Key 1' :key[lightkey]}, {'Key 2' : key[lightkeyID]}])

错误:

Traceback (most recent call last):
  File "/home/pi/Desktop/majorproject/testertestest.py", line 12, in <module>
    db.insert_multiple([{'Key 1' :key[lightkey]}, {'Key 2' : key[lightkeyID]}])

NameError:未定义名称“lightkey”

问题是我已经在它自己的文件中定义了“lightkey”。

要包含字典,如果您的文件位置在不同的目录中,您可以执行此操作(注意 path.append 正如@Coldspeed 提到的那样):

import sys
sys.path.append("path/foo/bar/")
from light import *

如果它与当前目录在同一目录中,则可以执行以下操作:

from light import *

假设它在同一目录中,用于导入your_filename.py的语法是

import your_filename

在你的情况下,这将是

import light

注意没有.py

如果您的文件位于不同的目录中,则需要执行以下操作:

import sys
sys.path.append('path/to/dir/containing/your_filename.py')
import your_filename

请注意,附加到sys.path是危险的,除非您知道自己在做什么,否则不应这样做。

官方文档中阅读更多关于 import 的信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM