Python操作系统-检查文件是否存在,如果存在,请重命名,再次检查,然后保存
我有一个脚本,它从表单中获取一个文件,重命名它并将其上载到文件夹,然后将记录插入数据库。我想添加一个功能,在保存文件之前,它会检查上传文件夹以确定文件名是否存在。如果文件确实存在,请在循环中重命名该文件,然后保存该文件 我目前拥有的:Python操作系统-检查文件是否存在,如果存在,请重命名,再次检查,然后保存,python,python-3.x,Python,Python 3.x,我有一个脚本,它从表单中获取一个文件,重命名它并将其上载到文件夹,然后将记录插入数据库。我想添加一个功能,在保存文件之前,它会检查上传文件夹以确定文件名是否存在。如果文件确实存在,请在循环中重命名该文件,然后保存该文件 我目前拥有的: file = request.files['xx'] extension = os.path.splitext(file.filename)[1] xx = str(uuid.uuid4()) + extension ## if xx exists .. xx =
file = request.files['xx']
extension = os.path.splitext(file.filename)[1]
xx = str(uuid.uuid4()) + extension
## if xx exists .. xx = str(uuid.uuid4()) + extension.. loop endlessly.
file.save(os.path.join(app.config['UPLOAD_FOLDER'], xx)
您是否尝试过使用
glob
,它提供了一个类似于ls
的界面,您可以按如下方式使用它:
import os
import glob
file_list = glob.glob('my_file')
if len(file_list) > 0:
os.rename('my_file', 'new_name')
尚未对此进行测试,但您可以使用
os.path.isfile()
检查文件是否已存在(对于目录,请使用os.path.exists
)
又快又脏,还没测试过。使用check和rename函数递归地将“_1”、“_2”等添加到文件名的末尾,直到可以保存为止
def check_and_rename(file, add=0):
original_file = file
if add != 0:
split = file.split(".")
part_1 = split[0] + "_" + str(add)
file = ".".join([part1, split[1]])
if not os.path.isfile(file):
# save here
else:
check_and_rename(original_file, add+=1)
这将检查文件是否存在,并通过增加数字生成不存在的新名称:
from os import path
def check_file(filePath):
if path.exists(filePath):
numb = 1
while True:
newPath = "{0}_{2}{1}".format(*path.splitext(filePath) + (numb,))
if path.exists(newPath):
numb += 1
else:
return newPath
return filePath
使用
shutil
模块:您可以在file.save行之前添加代码:while os.path.exists(xx):xx=str(uuid.uuid4())+扩展名感谢您通知shutil模块!。这会派上用场的!谢谢你,jyap,这正是我需要的!很高兴我能帮上忙。你的代码不起作用。我将编辑以满足目的。
def check_and_rename(file, add=0):
original_file = file
if add != 0:
split = file.split(".")
part_1 = split[0] + "_" + str(add)
file = ".".join([part1, split[1]])
if not os.path.isfile(file):
# save here
else:
check_and_rename(original_file, add+=1)
from os import path
def check_file(filePath):
if path.exists(filePath):
numb = 1
while True:
newPath = "{0}_{2}{1}".format(*path.splitext(filePath) + (numb,))
if path.exists(newPath):
numb += 1
else:
return newPath
return filePath