与平台无关的文件路径?

发布于 2024-11-08 01:23:00 字数 129 浏览 0 评论 0原文

如何在 Python 中使用应用程序文件夹内的文件?当然与平台无关...... 与此类似的东西:

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

How can I use a file inside my app folder in Python? Platform independent of course...
something similar to this:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

南烟 2024-11-15 01:23:00

您可以使用 os.path 及其函数,它们负责处理特定于操作系统的路径:

>>> import os
>>> os.path.join('app', 'subdir', 'dir', 'filename.foo')
'app/subdir/dir/filename.foo'

在 Windows 上,它应该用反斜杠打印出来。

You can use os.path and its functions, which take care of OS-specific paths:

>>> import os
>>> os.path.join('app', 'subdir', 'dir', 'filename.foo')
'app/subdir/dir/filename.foo'

On Windows, it should print out with backslashes.

旧情别恋 2024-11-15 01:23:00
import os
os.path.join(os.path.curdir, 'file.name')

或者

import os
os.path.join(os.path.dirname(__file__), 'file.name')

取决于它是模块(2)还是单个脚本(1),以及您是否从同一目录调用它(1)< /em>,或来自不同的(2)

编辑

看看您在问题中的“尝试”,我猜您会想要(1)

import os
os.path.join(os.path.curdir, 'file.name')

or

import os
os.path.join(os.path.dirname(__file__), 'file.name')

depending upon whether it's a module (2) or a single script (1), and whether you're invoking it from the same directory (1), or from a different one (2).

Edit

Looking at the "attempt" you have in your question, I'd guess that you'd want (1).

深者入戏 2024-11-15 01:23:00

在 Python 3.4+ 中,您可以使用 pathlib

from pathlib import Path

libdir = Path(__file__).resolve().with_name('modules')

如何它有效:__file__ 属性包含加载模块的文件的路径名。您可以使用它来初始化 Path 对象,使用 resolve() 方法并使用 with_name() 方法。

In Python 3.4+ you can use pathlib:

from pathlib import Path

libdir = Path(__file__).resolve().with_name('modules')

How it works: the __file__ attribute contains the pathname of the file from which the module was loaded. You use it to initialize a Path object , make the path absolute using the resolve() method and replace the final path component using the with_name() method.

空城旧梦 2024-11-15 01:23:00

__file__ 包含模块的位置。使用 os.path 中的函数从中提取目录。

__file__ contains the module's location. Use the functions in os.path to extract the directory from it.

久而酒知 2024-11-15 01:23:00

尝试这种符合 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 的启发。

你知道它是如何运作的吗?首先,它导入s os。之后,它创建一个名为 AppDomain 的变量,该变量被设置为一个类型的实例,其中其构造函数将其自己的 CurrentDomain 设置为其构造函数设置其自身的类型的实例。将 BaseDirectory 指向由 os.path.split 返回的数组中的第一个元素,并将 __file__ 的值(模块路径)作为参数。

Try this CLR-compliant way:

import os
AppDomain = type('', (object,), {'__init__': (lambda self: self.CurrentDomain = type('', (object,), {'__init__': (lambda self: self.BaseDirectory = os.path.split(__file__)[0])})())})()

Usage:

AppDomain.CurrentDomain.BaseDirectory

Inspired by System.AppDomain in .NET Framework and Core.

Do you know how it works? First off, it imports os. After that, it creates a variable called AppDomain which is set into an instance of a type where its constructor sets its own CurrentDomain to an instance of a type where its constructor sets its own BaseDirectory to the first element in the array returned by os.path.split with the value of __file__ (the module path) as a parameter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文