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