【发布时间】:2018-11-09 19:41:43
【问题描述】:
你知道当你下载一些东西并且下载文件夹包含一个同名的文件时,而不是覆盖它或抛出错误,文件最终会在末尾附加一个数字吗?比如我要下载my_file.txt,但是目标文件夹中已经存在,那么新的文件将命名为my_file(2).txt。如果我再试一次,它会是my_file(3).txt。
我想知道 Python 3.x 中是否有办法检查它并获得一个唯一的名称(不一定要创建文件或目录)。我目前正在这样做:
import os
def new_name(name, newseparator='_')
#name can be either a file or directory name
base, extension = os.path.splitext(name)
i = 2
while os.path.exists(name):
name = base + newseparator + str(i) + extension
i += 1
return name
在上面的示例中,如果 cwd 中已经存在 my_file.txt,则运行 new_file('my_file.txt') 将返回 my_file_2.txt。 name 也可以包含完整或相对路径,它也可以。
【问题讨论】:
-
我不明白:你的问题是python函数覆盖文件/目录而不告诉你问题?或者如果文件已经存在,您是否想要一个自动将数字添加到文件名的内置函数?你永远找不到后者,因为它是特定于应用程序的,与操作系统无关。
-
pathlib对于这样的事情真的很有帮助:docs.python.org/3/library/pathlib.html 特别是,请查看Path.touch(mode=0o666, exist_ok=True) -
所以...您编写了一个解决方案来解决您的问题,但您想知道它是否已经在某个地方得到解决并且是标准 Python 3 发行版的一部分?你介意解释一下原因吗?老实说,我真的不明白这一点
-
@Karl:这比更常见的“请什么内置函数完成以下复杂任务:(需求列表)”要好得多。
-
是的,这是真的。我不知道我的语气是否带有讽刺意味。不是这个意思,我只是好奇。如果 OP 提出了一个好的解决方案,为什么不保留它呢?
标签: python python-3.x