我有一个存储所有.py文件的目录.
bin/
main.py
user.py # where class User resides
dir.py # where class Dir resides
Run Code Online (Sandbox Code Playgroud)
我想在main.py中使用user.py和dir.py中的类.
如何将这些Python类导入main.py?
此外,User如果user.py位于子目录中,如何导入类?
bin/
dir.py
main.py
usr/
user.py
Run Code Online (Sandbox Code Playgroud) 我使用的是Python 3.5.1.我在这里阅读了文档和包部分:https://docs.python.org/3/tutorial/modules.html#packages
现在,我有以下结构:
/home/wujek/Playground/a/b/module.py
Run Code Online (Sandbox Code Playgroud)
module.py:
class Foo:
def __init__(self):
print('initializing Foo')
Run Code Online (Sandbox Code Playgroud)
现在,在/home/wujek/Playground:
~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
Run Code Online (Sandbox Code Playgroud)
同样,现在在家里,超级文件夹Playground:
~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
Run Code Online (Sandbox Code Playgroud)
实际上,我可以做各种各样的事情:
~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
Run Code Online (Sandbox Code Playgroud)
为什么这样做?我虽然有被需要的__init__.py文件(空的都可以)两种a,并b为module.py要导入的时候Python的路径指向Playground文件夹?
这似乎已经从Python 2.7改变了:
~ $ PYTHONPATH=Playground …Run Code Online (Sandbox Code Playgroud) 我想导入一些包,具体取决于用户选择的值.
默认为file1.py:
from files import file1
Run Code Online (Sandbox Code Playgroud)
如果用户选择file2,它应该是:
from files import file2
Run Code Online (Sandbox Code Playgroud)
在PHP中,我可以使用变量变量:
$file_name = 'file1';
include($$file_name);
Run Code Online (Sandbox Code Playgroud)
$file_name = 'file2';
include($$file_name);
Run Code Online (Sandbox Code Playgroud)
我怎么能用Python做到这一点?
参考这个问题,我有一个类似但不一样的问题..
在我的路上,我将有一些文本文件,结构如下:
var_a: 'home'
var_b: 'car'
var_c: 15.5
Run Code Online (Sandbox Code Playgroud)
我需要python读取文件,然后创建一个名为var_a的变量,其值为'home',依此类推.
例:
#python stuff over here
getVarFromFile(filename) #this is the function that im looking for
print var_b
#output: car, as string
print var_c
#output 15.5, as number.
Run Code Online (Sandbox Code Playgroud)
这是否可能,我的意思是,即使保留var类型?
请注意,我对文本文件结构有完全的自由,如果我提议的那个不是最好的,我可以使用我喜欢的格式.
编辑:ConfigParser可以是一个解决方案,但我不喜欢它,因为在我的脚本中我将有时参考文件中的变量
config.get("set", "var_name")
Run Code Online (Sandbox Code Playgroud)
但我喜欢的是直接引用变量,就像我在python脚本中声明的那样......
有一种方法可以将文件导入为python字典吗?
哦,最后一点,请记住,我不确切知道文本文件中有多少变量.
编辑2:我对stephan的JSON解决方案非常感兴趣,因为通过这种方式,可以使用其他语言(PHP,然后通过AJAX JavaScript)简单地读取文本文件,但是在执行该解决方案时我失败了:
#for the example, i dont load the file but create a var with the supposed file content
file_content = "'var_a': 4, 'var_b': 'a string'"
mydict = dict(file_content)
#Error: ValueError: dictionary update …Run Code Online (Sandbox Code Playgroud) 我想class从父目录中的一个目录中的 python 文件中导入一个。这是我当前的文件夹结构:
? run_simulation_from_parent.py
? __init__.py
?
????.vscode
? launch.json
? settings.json
?
????mod
? ? mods.py
? ? __init__.py
? ?
? ????__pycache__
? __init__.cpython-37.pyc
?
????sim
? ? run_simulation.py
? ? __init__.py
? ?
? ????__pycache__
? __init__.cpython-37.pyc
?
????__pycache__
__init__.cpython-37.pyc
Run Code Online (Sandbox Code Playgroud)
该文件mod/mods.py包含以下类:
class Objective:
"""Objective function class"""
def __init__(self, x):
self.x = x
Run Code Online (Sandbox Code Playgroud)
该文件sim/run_simulation.py包含:
from mod.mods import Objective
x = 5
obj = Objective(x)
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,出现以下错误:
File "sim/run_simulation.py", line 1, in <module> …Run Code Online (Sandbox Code Playgroud) 这是我的文件夹结构:
??? Basic
??? Coche
? ??? __init.py__
? ??? coche.py
??? miPrimerCoche.py
Run Code Online (Sandbox Code Playgroud)
我想在miPrimerCoche中导入类"coche.py".在coche.py我有这个:
class Coche:
def __init__(self, marca, color, caballos):
self.marca = marca
self.color = color
self.caballos = caballos
def datos(self):
return "Este coche es un: " + self.marca + \
" de color: " + self.color + " y con: " + str(self.caballos) + " caballos"
Run Code Online (Sandbox Code Playgroud)
而且,在miPrimerCoche我有这个代码:
from Coche import coche
miMercedes = coche("Toyota", "verde", 50)
print miMercedes.marca
print miMercedes.datos()
Run Code Online (Sandbox Code Playgroud)
然后,当我运行miPrimerCoche时,我收到此错误:
Traceback (most recent call last):
File "/Users/personalUser/PycharmProjects/untitled/Basic/importar_clase.py", …Run Code Online (Sandbox Code Playgroud)