【问题标题】:Postpending a string to filename (using pathlib Path) [duplicate]将字符串附加到文件名(使用 pathlib 路径)[重复]
【发布时间】:2019-12-28 05:56:52
【问题描述】:

我经常想在文件名后附加一个字符串,同时保留扩展名。

定义一个函数来后置字符串似乎很麻烦。例如(使用 pathlib 的 Path):

from pathlib import Path

def postpend(filename, string):
    filepath = Path(filename)
    return filepath.parent / (filepath.stem + string + filepath.suffix)

是否有内置函数可以为我执行此操作?有没有更好的办法?

【问题讨论】:

  • 我不认为已经有一个内置函数可以做你想要的,我碰巧认为你的代码并不繁琐,并且已经尽可能的优雅和可读。
  • 好的,我明白了,我不相信修改字符串是 pathlibs 的工作,它严格处理文件路径。所以在那种情况下,你正在做的事情很好。
  • 虽然有一个重命名函数我不知道 Path.rename(target),但不确定这是否对你有帮助。 docs.python.org/3/library/pathlib.html
  • 你想要什么返回 Pathstring
  • 不是内置的,但比你做的更简单:filepath.with_stem(filepath.stem + string)

标签: python python-3.x path pathlib


【解决方案1】:

如果你想返回一个string,你可以这样做:

from pathlib import Path

def postpend(filename, string):
    filepath = Path(filename)
    return f"{filepath.parent}\\{filepath.stem}-{string}{filepath.suffix}"

如果你想返回一个Path 对象:

from pathlib import Path

def postpend(filename: str, string: str) -> Path:
    filepath = Path(filename)
    return Path(f"{filepath.parent}\\{filepath.stem}-{string}{filepath.suffix}")

如果filename 参数是Path 并且您想返回Path,您可以这样做:

from pathlib import Path

def postpend(filename : Path, string: str) -> Path :
    return Path(f"{filename.parent}\\{filename.stem}-{string}{filename.suffix}")

【讨论】:

  • 示例显示了不应该这样做。您正在硬编码 Windows 路径分隔符,因此您使代码在其他平台上失败。 pathlib 的想法是让编写多平台代码成为可能。
【解决方案2】:

如果你的 UseCase 和你描述的完全一样,那么你可以使用这个小技巧:

filename.replace(".",f"{string}.",1)

既然您知道格式正确的文件名将包含一个 .,那么将其替换为字符串 + .

【讨论】:

  • @MatthiasArras 你测试了吗? 'nope_you_do_not.tar.gz'.replace('.', '--yes-i-do.', 1)。在这种情况下,它可以正常工作,因为 Felix 明智地使用了 replace()count 参数。如果您将带有点的路径放入filename,它将失败。喜欢:filename='path.with.dots/file.tar.gz'
  • 我没有测试它。很酷,它仍然有效。菲利克斯的最后一句话是误导。我删除了我的评论,因为它现在具有误导性。
猜你喜欢
  • 2018-10-18
  • 1970-01-01
  • 2017-11-03
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 1970-01-01
相关资源
最近更新 更多