相关疑难解决方法(0)

将另一个后缀添加到已具有pathlib后缀的路径中

我正在转换一些旧的Python代码pathlib而不是os.path用于大多数与路径相关的操作,但我最终遇到了以下问题:我需要向已经有扩展的路径添加另一个扩展(而不是替换它).有了os.path,因为我们仅仅处理字符串,该解决方案是与字符串操作添加扩展:

newpath = path + '.res'
Run Code Online (Sandbox Code Playgroud)

它不起作用,pathlib.Path因为它不允许连接任意字符.我能找到的最接近的是:

newpath = path.with_suffix(path.suffix + '.res')
Run Code Online (Sandbox Code Playgroud)

它看起来像一个变通方法,因为它最终仍然使用字符串添加.它有一个新的陷阱,因为我首先忘记了已经有几个扩展并且你想要添加一个新扩展的情况,导致以下代码恢复旧的行为:

newpath = path.with_suffix(''.join(path.suffixes) + '.res')
Run Code Online (Sandbox Code Playgroud)

现在它不会感到简洁和干净,因为它使用越来越多的字符串操作来实现旧行为而不是纯路径操作.Path.suffixes存在的事实意味着库的开发人员考虑了文件可以有多个扩展的情况,但我找不到简单地向路径添加新扩展的方法.我是否有更多惯用的方式来实现相同的行为?

编辑:实际上path.with_suffix(path.suffix + '.res')足以处理已经有几个文件扩展名的情况,即使它对我来说并不是很明显.

python python-3.x pathlib

27
推荐指数
6
解决办法
4266
查看次数

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

我有一个文件名:name.ext

我想做以下事情:

name + id + '.' + ext for name, ext in filename.split()
Run Code Online (Sandbox Code Playgroud)

或者找到一种更好的方法来获取文件名并在扩展名之前添加一个随机的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('.'))
Run Code Online (Sandbox Code Playgroud)

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

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

python

12
推荐指数
3
解决办法
1万
查看次数

标签 统计

python ×2

pathlib ×1

python-3.x ×1