【问题标题】:Moving up one directory in Python在 Python 中上移一个目录
【发布时间】:2013-07-26 23:15:39
【问题描述】:

有没有一种简单的方法可以使用一行代码在 python 中上移一个目录?命令行中类似于cd ..的东西

【问题讨论】:

    标签: python directory


    【解决方案1】:
    >>> import os
    >>> print os.path.abspath(os.curdir)
    C:\Python27
    >>> os.chdir("..")
    >>> print os.path.abspath(os.curdir)
    C:\
    

    【讨论】:

      【解决方案2】:

      使用os.chdir 应该可以:

      import os
      os.chdir('..')
      

      【讨论】:

        【解决方案3】:

        显然 os.chdir('..') 是正确的答案。但仅供参考,如果将来您遇到必须广泛操作目录和路径的情况,这里有一个很棒的包 (Unipath),它可以让您将它们视为 Python 对象:https://pypi.python.org/pypi/Unipath

        这样你就可以做这样的事情:

        >>> from unipath import Path
        >>> p = Path("/usr/lib/python2.5/gopherlib.py")
        >>> p.parent
        Path("/usr/lib/python2.5")
        >>> p.name
        Path("gopherlib.py")
        >>> p.ext
        '.py'
        

        【讨论】:

        • 在 python3.4 中引入了 pathlib,旨在解决同样的问题(更多详细信息请参阅我的回答)。
        【解决方案4】:

        嗯.. 我不确定 os.chdir('..') 的便携性如何。在 Unix 下,这些是真实的文件名。我更喜欢以下内容:

        import os
        os.chdir(os.path.dirname(os.getcwd()))
        

        获取当前工作目录,升级一个目录,然后切换到该目录。

        【讨论】:

        • 还有,os.chdir(os.path.pardir) 的输入稍微少一些。这个答案稍微独立于平台,但这有点争议,因为虽然您可以想象一个不将.. 表示为父目录的平台,但任何人当前使用的任何平台(包括 Windows 和 UNIX)都可以以这种方式表示它。
        • 是的,你是对的!我刚刚在 Windows 盒子上完成了测试,.. 工作正常。我总是对窗户的期望如此之低,但有时确实让我感到惊讶:)。尽管如此,乱七八糟的代码总是困扰着我。
        • 我同意,但只是在想:我想知道是否会有一个真正的系统永远不使用这个特定的约定。
        • 我希望不会。 Unix 4 的生命。
        • 这怎么会向上移动一个目录?我不明白代码。如果我想上移两个目录怎么办?
        【解决方案5】:

        在 Python 3.4 中引入了 pathlib

        >>> from pathlib import Path
        >>> p = Path('/etc/usr/lib')
        >>> p
        PosixPath('/etc/usr/lib')
        >>> p.parent
        PosixPath('/etc/usr')
        

        它还具有许多其他有用的功能,例如用于使用斜杠连接路径或轻松遍历目录树。

        有关更多信息,请参阅docsthis blog post,其中涵盖了 os.path 和 pathlib 之间的区别。

        【讨论】:

          【解决方案6】:

          虽然这不是 OP 的真正含义,因为这不是超级简单,但是,当从 Notepad++ 运行脚本时,os.getcwd() 方法无法按预期工作。这就是我会做的:

          import os
          
          # get real current directory (determined by the file location)
          curDir, _ = os.path.split(os.path.abspath(__file__))
          
          print(curDir) # print current directory
          

          定义一个这样的函数:

          def dir_up(path,n): # here 'path' is your path, 'n' is number of dirs up you want to go
              for _ in range(n):
                  path = dir_up(path.rpartition("\\")[0], 0) # second argument equal '0' ensures that 
                                                                  # the function iterates proper number of times
              return(path)
          

          这个函数的使用相当简单——你只需要你的路径和目录数量。

          print(dir_up(curDir,3)) # print 3 directories above the current one
          

          唯一的缺点是它不会在驱动器号上停止,它只会显示空字符串。

          【讨论】:

            【解决方案7】:

            将 Kim 的答案与 os 结合起来:

            p=Path(os.getcwd())
            os.chdir(p.parent)
            

            【讨论】:

              【解决方案8】:

              向上移动多个目录的便捷方法是pathlib

              from pathlib import Path
                  
              full_path = "C:\Program Files\Python37\lib\pathlib.py"
              print(Path(full_path).parents[0])
              print(Path(full_path).parents[1])
              print(Path(full_path).parents[2])
              print(Path(full_path).parents[3])
              
              print([str(Path(full_path).parents[i]) for i in range(4)])
              

              输出:

              C:\Program Files\Python37\lib
              C:\Program Files\Python37
              C:\Program Files
              C:\
              
              ['C:\\Program Files\\Python37\\lib', 'C:\\Program Files\\Python37', 'C:\\Program Files', 'C:\\']
              

              【讨论】:

                猜你喜欢
                • 2018-09-05
                • 1970-01-01
                • 2021-09-19
                • 1970-01-01
                • 1970-01-01
                • 2021-10-01
                • 1970-01-01
                • 2021-06-16
                • 2017-06-09
                相关资源
                最近更新 更多