如何在扩展名前向文件名添加ID?

发布于 2021-01-29 17:02:02

我有一个文件名: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函数的正确方法是什么?

关注者
0
被浏览
92
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    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 保留点,因此您需要将其从格式字符串中删除

    尽管如此,我在这里也不会感到困惑-请参阅下一个答案,以获取更具可读性的解决方案。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看