如何在扩展名前向文件名添加ID?
我有一个文件名: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也不例外。您应该使用os.path.splitext:
def append_id(filename): return "{0}_{2}{1}".format(*os.path.splitext(filename) + (generate_id(),))
请注意,第二个版本需要进行两项附加修改:
splitext
返回一个元组而不是一个列表,所以我们需要generate_id
用一个元组包装结果splitext
保留点,因此您需要将其从格式字符串中删除
尽管如此,我在这里也不会感到困惑-请参阅下一个答案,以获取更具可读性的解决方案。