【问题标题】:How can I extract the folder path from file path in Python?如何从 Python 中的文件路径中提取文件夹路径?
【发布时间】:2013-06-08 02:18:02
【问题描述】:

我只想获取文件完整路径中的文件夹路径。

例如T:\Data\DBDesign\DBDesign_93_v141b.mdb,我只想得到T:\Data\DBDesign(不包括\DBDesign_93_v141b.mdb)。

我尝试过这样的事情:

existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = str(existGDBPath.split('\\')[0:-1])
print wkspFldr 

但它给了我这样的结果:

['T:', 'Data', 'DBDesign']

这不是我需要的结果(T:\Data\DBDesign)。

关于如何获取文件路径的任何想法?

【问题讨论】:

    标签: python file path directory extract


    【解决方案1】:

    使用split 函数时,您已经快到了。您只需要加入字符串,如下所示。

    >>> import os
    >>> '\\'.join(existGDBPath.split('\\')[0:-1])
    'T:\\Data\\DBDesign'
    

    虽然,我建议使用os.path.dirname 函数来执行此操作,您只需要传递字符串,它就会为您完成工作。由于您似乎在 Windows 上,请考虑使用 abspath 函数。一个例子:

    >>> import os
    >>> os.path.dirname(os.path.abspath(existGDBPath))
    'T:\\Data\\DBDesign'
    

    如果要拆分后的文件名和目录路径,可以使用os.path.split函数返回一个元组,如下。

    >>> import os
    >>> os.path.split(os.path.abspath(existGDBPath))
    ('T:\\Data\\DBDesign', 'DBDesign_93_v141b.mdb')
    

    【讨论】:

    • os.sep.join(existGDBPath.split(os.sep)[:-1] 看起来更漂亮。
    • '\\'.join() 不可移植,请改用os.path.join()
    • 使用 str 方法 splitjoin 是不可移植的(想想 *nix 上的 /)。 os.path 有你需要的所有方法。
    【解决方案2】:

    使用 PATHLIB 模块(更新答案)

    人们应该考虑使用pathlib 进行新的开发。它在 Python3.4 的 stdlib 中,但在早期版本中是 available on PyPI。这个库提供了一种更加面向对象的方法来操作路径<opinion>,并且使用</opinion> 更容易阅读和编程。

    >>> import pathlib
    >>> existGDBPath = pathlib.Path(r'T:\Data\DBDesign\DBDesign_93_v141b.mdb')
    >>> wkspFldr = existGDBPath.parent
    >>> print wkspFldr
    Path('T:\Data\DBDesign')
    

    带有操作系统模块

    使用os.path 模块:

    >>> import os
    >>> existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
    >>> wkspFldr = os.path.dirname(existGDBPath)
    >>> print wkspFldr 
    'T:\Data\DBDesign'
    

    您可以继续假设,如果您需要进行某种文件名操作,它已经在os.path 中实现。如果没有,您可能仍需要将此模块用作构建块。

    【讨论】:

    • Path().parent 我在找什么!
    • 标记只是因为您将 卡在标签中!
    【解决方案3】:

    内置的子模块os.path 具有完成该任务的功能。

    import os
    os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')
    

    【讨论】:

      【解决方案4】:

      代码如下:

      import os
      existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
      wkspFldr = os.path.dirname(existGDBPath)
      print wkspFldr # T:\Data\DBDesign
      

      【讨论】:

        【解决方案5】:

        这是我用于拆分路径 int 文件、路径标记的小实用程序助手:

        import os    
        # usage: file, path = splitPath(s)
        def splitPath(s):
            f = os.path.basename(s)
            p = s[:-(len(f))-1]
            return f, p
        

        【讨论】:

          【解决方案6】:

          任何尝试在 ESRI GIS 表字段计算器界面中执行此操作的人都可以使用 Python 解析器

          PathToContainingFolder =

          "\\".join(!FullFilePathWithFileName!.split("\\")[0:-1])
          

          这样

          \Users\me\Desktop\新文件夹\file.txt

          变成

          \Users\me\Desktop\新建文件夹

          【讨论】:

            【解决方案7】:

            我用这个把当前工作目录改成文件夹;

            from os import chdir
            from os.path import realpath
            from os.path import dirname
            
            chdir(realpath(dirname(argv[0])))
            
            • chdir 更改工作目录。我怀疑你会需要这个。
            • realpath 遵循符号链接。
            • dirname 只返回路径
            • argv 是用来执行程序的命令行

            【讨论】:

              猜你喜欢
              • 2010-10-14
              • 2011-09-01
              • 1970-01-01
              • 2017-11-03
              • 2010-10-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多