我有一个文件名: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
函数的正确方法是什么?
原文由 ss7 发布,翻译遵循 CC BY-SA 4.0 许可协议
要在一行中完成,您可以尝试:
不过,它的可读性不是很好。
大多数语言实现都提供了处理文件名的函数,Python 也不例外。你应该使用 os.path.splitext :
请注意,第二个版本需要两个额外的修改:
splitext
返回一个元组而不是列表,所以我们需要用一个元组包装generate_id
的结果splitext
保留点,所以你需要从格式字符串中删除它尽管如此,我还是不会为在这里拥有一个单行而苦苦挣扎 - 请参阅下一个答案以获取更具可读性的解决方案。
Python 3.4 引入了
pathlib
模块,您可以像这样使用它:这仅适用于没有前面路径的文件名。对于具有路径的文件,请使用:
在 Python 3.9 中还有
with_stem
,这可能是最适合这种情况的选择。