【问题标题】:How to deal with multiple dots in a file name with Python pathlib?如何使用 Python pathlib 处理文件名中的多个点?
【发布时间】:2019-06-18 18:00:19
【问题描述】:

当我尝试构建一个带有“.”的文件路径时,我遇到了 pathlib 的问题。 pathlib 模块在其名称中会忽略它。

这里是示例行(我尝试了多个版本,都导致相同的问题)

问题是原始文件名将来自另一个应用程序,所以我不能自己编辑名称。如果可能的话,我也不想做字符串替换工作。

path=r"c:\temp"

1

p=Path(path).joinpath("myfile.001").with_suffix(".bat")

2

p=Path(path, "myfile.001").with_suffix(".bat")

3

p=Path(path).with_name("myfile.001").with_suffix(".bat")

所有这些行都将屈服于

WindowsPath('C:/temp/myfile.bat')

那么我如何使 pathlib.Path 正确地构造这个完整路径。最终路径必须是

WindowsPath('C:/temp/myfile.001.bat')

没有

WindowsPath('C:/temp/myfile.bat')

自然我正在寻找一种通过pathlib本身来实现它的方法,否则我只能使用os。

谢谢

【问题讨论】:

    标签: python windows file filesystems


    【解决方案1】:

    您告诉 pathlib 将后缀 .001 替换为后缀 .bat。 pathlib 符合要求。

    告诉 pathlib 将 .bat 添加到现有后缀。

    p = Path(path, 'myfile.001')
    p = p.with_suffix(p.suffix+'.001')
    

    【讨论】:

    • 不要误会我的意思,但我如何告诉 pathlib 用后缀替换后缀? Pathlib 决定“.001”是一个后缀,即使我将它与 .with_name("myfile.001") 方法一起使用也是如此。如果不是专门对待它们,那么拥有 .with_name 和 .with_suffix 方法的意义何在。
    • @yaruncan: with_suffix 告诉 pathlib 替换现有的后缀。
    • 我明白了,我认为这是构建方式的一部分。我会再看一遍。
    • 事情就是这样,这使得很难猜测传入文件名(不是扩展名)发生了什么,它可能是 myfile.001.002.003.004 正如你所看到的,这些数字都不是扩展名.因为它们是可能重复对象的名称(在 Blender 中)有意义吗?
    • @yaruncan:确实,它可以导致这样的名称。 pathlib 不知道你想以不同的方式对待.bat.001。如果您想使用自己的文件扩展名概念,则必须自己处理。
    猜你喜欢
    • 2018-01-25
    • 2022-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 2022-06-12
    相关资源
    最近更新 更多