1

我有一个 python 程序,我想从程序中获取程序的路径,但包括文件名本身。我的文件名是 PyWrapper.py。现在我正在这样做:

import sys,os
pathname = os.path.dirname(sys.argv[0])
fullpath = os.path.abspath(pathname)
print fullpath

输出是:

 /home/mrpickles/Desktop/HANSTUFF/securesdk/src/

这是保存我的文件的目录的路径,但我希望它输出:

/home/mrpickles/Desktop/HANSTUFF/securesk/src/PyWrapper.py/

这是路径,包括文件名本身。这可能吗?谢谢。

4

4 回答 4

2

看看__file__。这为您提供了代码实际所在的文件

此外,还有另一种选择:

import __main__ as main
print(main.__file__)

这为您提供了正在运行的脚本的文件名(类似于您argv所做的)。

当代码由另一个脚本导入时,差异就会发挥作用。

于 2016-06-10T18:19:00.843 回答
0
print __file__

应该管用。

__file__返回执行文件的路径

于 2016-06-10T18:16:46.873 回答
0

以防万一您想在同一目录中找到其他文件的绝对路径,而不仅仅是您当前正在运行的文件,一般方法可能如下所示:

import sys,os

pathname = os.path.dirname(sys.argv[0])
fullpath = os.path.abspath(pathname)

for root, dirs, files in os.walk(fullpath):
    for name in files:
        name = str(name)
        name = os.path.realpath(os.path.join(root,name))
        print name

正如其他人所提到的,您可以利用该__file__属性。您可以使用该__file__属性返回与当前加载的 Python 模块相关的几个不同路径(从另一个 StackOverflow 答案复制):

当一个模块在 Python 中加载时,文件被设置为其名称。然后,您可以将其与其他功能一起使用来查找文件所在的目录。

# The parent directory of the directory where program resides.
print os.path.join(os.path.dirname(__file__), '..')

# The canonicalised (?) directory where the program resides.
print os.path.dirname(os.path.realpath(__file__))

# The absolute path of the directory where the program resides.
print os.path.abspath(os.path.dirname(__file__))

请记住要警惕您正在加载的模块来自何处。它可能会影响属性的内容(从Python 3 Data model documentation__file__复制):

__file__是从文件中加载模块的文件的路径名(如果它是从文件中加载的)。某些类型的模块可能缺少__file__属性,例如静态链接到解释器的 C 模块;对于从共享库动态加载的扩展模块,它是共享库文件的路径名。

于 2016-06-10T18:19:14.290 回答
0

尝试使用__file__. 只要模块是从文件中运行的,即不是编辑器中的代码,__file__就会是模块的绝对路径!

print __file__

或用于命令行。

def get_my_name():
    if __name__ == '__main__':
        return os.path.abspath(os.path.join(os.curdir, __file__))
    else:
        return __file__.replace('.pyc', '.py')
于 2016-06-10T18:22:10.967 回答