【问题标题】:Renaming file extension using pathlib (python 3)使用 pathlib 重命名文件扩展名(python 3)
【发布时间】:2019-01-11 19:10:36
【问题描述】:

我正在使用 Windows 10 和 winpython。我有一个扩展名为 .dwt 的文件(它是一个文本文件)。我想将此文件的扩展名更改为 .txt。

我的代码不会抛出任何错误,但不会更改扩展名。

from pathlib import Path

filename = Path("E:\\seaborn_plot\\x.dwt")

print(filename)

filename_replace_ext = filename.with_suffix('.txt')

print(filename_replace_ext)

在winpython的ipython窗口输出中打印出预期的结果(如下图):

E:\seaborn_plot\x.dwt

E:\seaborn_plot\x.txt

但是当我寻找一个重命名的扩展名的文件时,扩展名并没有改变,只有原始文件存在。我怀疑 windows 文件权限。

【问题讨论】:

    标签: python windows pathlib


    【解决方案1】:

    您必须实际重命名文件,而不仅仅是打印出新名称。

    1. 使用Path.rename()

       from pathlib import Path
       my_file = Path("E:\\seaborn_plot\\x.dwt")
       my_file.rename(my_file.with_suffix('.txt'))
      

    注意:要替换存在的目标,请使用Path.replace()

    1. 使用os.rename()

       import os
       my_file = 'E:\\seaborn_plot\\x.dwt'
       new_ext = '.txt'
       # Gets my_file minus the extension
       name_without_ext = os.path.splitext(my_file)[0]
       os.rename(my_file, name_without_ext + new_ext)
      

    参考:

    1. os.path.splitext(path)
    2. PurePath.with_suffix(suffix)

    【讨论】:

    • Pathrenamereplace 方法,例如filename.replace(filename.with_suffix('.txt'))。对于类 Unix 行为,我们需要replace。在 Windows 中,如果目标存在,os.renamePath.rename 会引发 FileExistsError。在 Unix 中,rename 将默默替换现有目标。
    【解决方案2】:

    来自文档:

    @987654321@

    将此文件或目录重命名为给定的目标。在 Unix 上,如果 target 存在并且是一个文件,如果用户有权限,它将被静默替换。 target 可以是字符串或其他路径对象。

    pathlib — Object-oriented filesystem paths on docs.python.org

    你可以这样使用它:

    from pathlib import Path
    
    
    filename = Path("E:\\seaborn_plot\\x.dwt")
    filename_replace_ext = filename.with_suffix(".txt")
    filename.rename(filename_replace_ext)
    

    【讨论】:

    • 尽管我命名它在 unix 上的方式,但它的行为是相同的,而目录和用户有权替换。
    猜你喜欢
    • 2021-02-13
    • 1970-01-01
    • 2016-10-14
    • 2013-05-17
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2019-12-29
    相关资源
    最近更新 更多