如何在Python中的app文件夹中使用文件?平台独立当然...... 类似的东西:
#!/bin/sh
mypath=${0%/*}
LIBDIR=$mypath/modules
答案 0 :(得分:68)
您可以使用os.path
及其功能来处理特定于操作系统的路径:
>>> import os
>>> os.path.join('app', 'subdir', 'dir', 'filename.foo')
'app/subdir/dir/filename.foo'
在Windows上,它应该用反斜杠打印出来。
答案 1 :(得分:18)
import os
os.path.join(os.path.curdir, 'file.name')
或
import os
os.path.join(os.path.dirname(__file__), 'file.name')
取决于它是模块(2)还是单个脚本(1),以及是否从同一目录调用它(1) ),或来自另一个(2)。
看看你在问题中的“尝试”,我猜你想要(1)。
答案 2 :(得分:6)
在Python 3.4+中,您可以使用pathlib
:
from pathlib import Path
libdir = Path(__file__).resolve().with_name('modules')
工作原理:__file__
属性包含加载模块的文件的路径名。您可以使用它来初始化Path
对象,使用resolve()
方法使路径绝对,并使用with_name()
方法替换最终路径组件。
答案 3 :(得分:5)
__file__
包含模块的位置。使用os.path
中的函数从中提取目录。
答案 4 :(得分:0)
尝试这种CLR兼容方式:
import os
AppDomain = type('', (object,), {'__init__': (lambda self: self.CurrentDomain = type('', (object,), {'__init__': (lambda self: self.BaseDirectory = os.path.split(__file__)[0])})())})()
用法:
AppDomain.CurrentDomain.BaseDirectory
在.NET Framework 和 Core中受System.AppDomain
的启发。
您知道它是如何工作的吗?首先,它import
个os
。之后,它将创建一个名为AppDomain
的变量,该变量被设置为类型的实例,在该实例中其构造函数将自己的CurrentDomain
设置为一个类型的实例,在该实例中其构造函数将其自己的BaseDirectory
到os.path.split
返回的数组中的第一个元素,并以值__file__
(模块路径)作为参数。