我有一个脚本从表单中获取文件,重命名并将其上传到文件夹并将记录插入数据库。我想在保存文件之前添加功能,它会检查上传文件夹以确定文件名是否存在。如果它存在,则在循环中重命名该文件,然后保存该文件。
我目前的情况:
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)
答案 0 :(得分:1)
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)
答案 1 :(得分:0)
您是否尝试使用glob
Module,它提供了类似于ls
的界面,您可以按照以下方式使用它:
import os
import glob
file_list = glob.glob('my_file')
if len(file_list) > 0:
os.rename('my_file', 'new_name')
答案 2 :(得分:0)
Haven尚未对此进行测试,但您可以使用os.path.isfile()
检查文件是否已存在(对于目录,请使用os.path.exists
)。
import os
def save():
file = request.files['xx']
extension = os.path.splitext(file.filename)[1]
xx = generate_filename(extension)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], xx))
def generate_filename(extension):
xx = str(uuid.uuid4()) + extension
if os.path.isfile(os.path.join(app.config['UPLOAD_FOLDER'], xx)):
return generate_filename(extension)
return xx
答案 3 :(得分:0)
public void Execute()
{
//Parallel.ForEach(Files, (file) =>
//{
// Resize.ResizeImage(file.FullName);
//}
//);
Parallel.ForEach(Files, new ParallelOptions() { MaxDegreeOfParallelism = 2 }, (file) => { Resize.ResizeImage(file.FullName); } );
}
答案 4 :(得分:0)
这将检查文件是否存在,并通过增加数字来生成不存在的新名称:
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