与平台无关的文件路径?

时间:2011-05-17 19:33:11

标签: python path cross-platform

如何在Python中的app文件夹中使用文件?平台独立当然...... 类似的东西:

#!/bin/sh
mypath=${0%/*}
LIBDIR=$mypath/modules

5 个答案:

答案 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的启发。

您知道它是如何工作的吗?首先,它importos。之后,它将创建一个名为AppDomain的变量,该变量被设置为类型的实例,在该实例中其构造函数将自己的CurrentDomain设置为一个类型的实例,在该实例中其构造函数将其自己的BaseDirectoryos.path.split返回的数组中的第一个元素,并以值__file__(模块路径)作为参数。