gpt4 book ai didi

python - 如何在扩展名前为文件名添加一个 id?

转载 作者:太空狗 更新时间:2023-10-29 17:52:19 25 4
gpt4 key购买 nike

我有一个文件名:name.ext

我想做以下事情:

name + id + '.' + ext for name, ext in filename.split()

或者找到一个更好的方法来获取文件名并在扩展名之前的末尾添加一个随机的 7 个字符的字符串。

这是我目前所拥有的:

def generate_id(size=7, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))

def append_id(filename):
return (name + '_' + generate_id() + '.' + ext for name, ext in filename.split('.'))

但它将其视为生成器表达式,这不是我想要的结果。

编写 append_id 函数的正确方法是什么?

最佳答案

要在一行中完成,您可以尝试:

def append_id(filename):
return "{0}_{2}.{1}".format(*filename.rsplit('.', 1) + [generate_id()])

不过,它的可读性不是很好。

大多数语言的实现都提供了处理文件名的函数,Python也不异常(exception)。你应该使用 os.path.splitext :

def append_id(filename):
return "{0}_{2}{1}".format(*os.path.splitext(filename) + (generate_id(),))

请注意,第二个版本需要两个额外的修改:

  • splitext 返回一个元组而不是列表,所以我们需要用一个元组包裹generate_id的结果
  • splitext 保留点,因此您需要将其从格式字符串中移除

不过,我不会费力地在这里使用 oneliner - 请参阅下一个答案以获得更具可读性的解决方案。

Python 3.4 引入了 pathlib模块,你可以像这样使用它:

from pathlib import Path

def append_id(filename):
p = Path(filename)
return "{0}_{2}{1}".format(p.stem, p.suffix, generate_id())

这仅适用于没有前面路径的文件名。对于带有路径的文件,使用这个:

from pathlib import Path

def append_id(filename):
p = Path(filename)
return "{0}_{2}{1}".format(Path.joinpath(p.parent, p.stem), p.suffix, generate_id())

在 Python 3.9 中还有 with_stem ,这可能是这种情况下最合适的选择。

关于python - 如何在扩展名前为文件名添加一个 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37487758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com