修复文件名后缀位置不对问题
This commit is contained in:
@@ -197,26 +197,34 @@ class PathManager:
|
|||||||
|
|
||||||
def generate_unique_filename(self, directory: str, base_filename: str,
|
def generate_unique_filename(self, directory: str, base_filename: str,
|
||||||
extension: str, overwrite: bool = False) -> str:
|
extension: str, overwrite: bool = False) -> str:
|
||||||
"""生成唯一的文件名(如果文件已存在且不允许覆盖)"""
|
|
||||||
filename = f"{base_filename}{extension}"
|
filename = f"{base_filename}{extension}"
|
||||||
filepath = os.path.join(directory, filename)
|
filepath = os.path.join(directory, filename)
|
||||||
|
|
||||||
if not os.path.exists(filepath) or overwrite:
|
if not os.path.exists(filepath) or overwrite:
|
||||||
return filename
|
return filename
|
||||||
|
m = re.match(r"^(.*)_(\d+)$", base_filename)
|
||||||
# 生成唯一文件名
|
if m:
|
||||||
counter = 1
|
root = m.group(1)
|
||||||
while True:
|
num_str = m.group(2)
|
||||||
new_filename = f"{base_filename}_{counter:03d}{extension}"
|
padding = len(num_str)
|
||||||
new_filepath = os.path.join(directory, new_filename)
|
try:
|
||||||
if not os.path.exists(new_filepath):
|
num = int(num_str)
|
||||||
return new_filename
|
except ValueError:
|
||||||
counter += 1
|
num = 1
|
||||||
|
while True:
|
||||||
# 防止无限循环
|
num += 1
|
||||||
if counter > 9999:
|
new_filename = f"{root}_{str(num).zfill(padding)}{extension}"
|
||||||
break
|
if not os.path.exists(os.path.join(directory, new_filename)):
|
||||||
|
return new_filename
|
||||||
# 如果还是冲突,使用时间戳
|
if num > 9999999:
|
||||||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S_%f")[:17] # 精确到毫秒
|
break
|
||||||
|
else:
|
||||||
|
counter = 1
|
||||||
|
while True:
|
||||||
|
new_filename = f"{base_filename}_{counter:03d}{extension}"
|
||||||
|
if not os.path.exists(os.path.join(directory, new_filename)):
|
||||||
|
return new_filename
|
||||||
|
counter += 1
|
||||||
|
if counter > 9999999:
|
||||||
|
break
|
||||||
|
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S_%f")[:17]
|
||||||
return f"{base_filename}_{timestamp}{extension}"
|
return f"{base_filename}_{timestamp}{extension}"
|
||||||
|
|||||||
Reference in New Issue
Block a user