如何使用Python 3获取文件的正确绝对路径?

时间:2018-07-27 23:39:35

标签: python python-3.x file

我正在尝试获取文件的绝对路径,但是它不起作用。我的代码仅显示运行代码目录的路径。这是我尝试过的两种方法:

1)

import os
print(os.path.abspath("More_Types.py"))

2)

import os
print(os.path.realpath("More_Types.py"))

但是我继续获得正在运行的程序的完整路径。如何获取文件的正确路径,该路径位于计算机的其他位置?

PS:很抱歉,我无法提供输出,因为它将显示我正在运行的程序中的所有文件夹。

2 个答案:

答案 0 :(得分:0)

More_Types.pysubdir/More_Types.py../More_Types.py是相对路径。

结果

如果提供相对路径,realpathabspath将返回相对于当前工作目录的绝对路径。因此,从本质上讲,它们的行为类似于os.path.join,其中当前工作目录为第一个参数:

>>> import os.path
>>> os.path.join(os.getcwd(), 'More_Types.py') == os.path.abspath('More_Types.py')
True

这说明了为什么您得到说明的结果。

说明

abspath的目的是将相对路径转换为绝对路径:

>>> os.path.abspath('More_Types.py')
'/home/meisterluk/More_Types.py'

abspath不同,relpath也遵循符号链接。从技术上讲,这很危险,并且可能使您陷入无限循环(如果链接指向其父目录中的任何一个):

>>> os.path.abspath('More_Types.py')
'/net/disk-user/m/meisterluk/More_Types.py'

建议的解决方案

但是,如果要检索相对于其他目录的绝对路径,则可以直接使用os.path.join

>>> directory = '/home/foo'
>>> os.path.join(directory, 'More_Types.py')
'/home/foo/More_Types.py'
>>>

我认为,对您的问题的最佳答案是:您需要指定文件所在的目录。然后可以使用os.path.join创建绝对文件路径。

答案 1 :(得分:0)

如果需要,您可以使用它:

import os
a='MoreTypes.py'

for root , dirs , files in os.walk('.') :

    for file in files:
        if file==a:
            print(os.path.join(root,file))