【问题标题】:Python: move a file up one directoryPython:将文件上移一个目录
【发布时间】:2018-09-05 18:30:52
【问题描述】:

下面是一个小测试例程,它获取文件的路径并将文件向上移动一个目录。我正在使用 os 和 shutil 模块,是否有一个模块可以执行此任务?有没有更 Pythonic 的方式来实现这个功能?

以下代码在 Windows 上运行,但最好的跨平台解决方案将不胜感激。

def up_one_directory(path):
    """Move file in path up one directory"""
    head, tail = os.path.split(path)
    try:
        shutil.move(path, os.path.join(os.path.split(head)[0], tail))
    except Exception as ex:
        # report
        pass

【问题讨论】:

    标签: python-3.x directory shutil pathlib


    【解决方案1】:

    这与@thierry-lathuille 的答案相同,但不需要shutil

    p = Path(path).absolute()
    parent_dir = p.parents[1]
    p.rename(parent_dir / p.name)
    

    【讨论】:

    • 认为使用重命名存在问题,但我错了 - 这很有效。
    • 并注意我们需要确保新的路径目录存在。对于父目录,这始终是正确的。
    【解决方案2】:

    从 Python 3.4 开始,您可以使用 pathlib 模块:

    import shutil
    from pathlib import Path
    
    
    def up_one_dir(path):
        try:
            # from Python 3.6
            parent_dir = Path(path).parents[1]
            # for Python 3.4/3.5, use str to convert the path to string
            # parent_dir = str(Path(path).parents[1])
            shutil.move(path, parent_dir)
        except IndexError:
            # no upper directory
            pass
    

    【讨论】:

    • 我认为 os.path.join() 仍然需要。 "os.path.join(Path(path).parents[1], Path(path).name)"
    • 不,请参阅shutil.move 的文档:如果目标是现有目录,则将 src 移动到该目录中。
    • 我的错误,它不起作用,并且看到 parent_dir 没有包含该文件。
    • 得到以下错误:“TypeError: _isdir: 路径参数的非法类型”
    • 你怎么称呼它?你使用的是什么版本的 Python?我对 Python 3.6 没有任何问题。
    【解决方案3】:

    使用它来上移一个目录:

    filePath = os.getcwd()
    os.chdir("..")
    folderpath = os.getcwd()
    shutil.copy(filePath, folderPath)
    

    【讨论】:

    • 我的意思是获取一个物理文件并将其从当前目录移动到上一级目录。
    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 2017-06-09
    • 2017-07-20
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多