Python OS - 检查文件是否存在,如果重命名,再次检查,然后保存

时间:2017-03-30 02:41:47

标签: python python-3.x

我有一个脚本从表单中获取文件,重命名并将其上传到文件夹并将记录插入数据库。我想在保存文件之前添加功能,它会检查上传文件夹以确定文件名是否存在。如果它存在,则在循环中重命名该文件,然后保存该文件。

我目前的情况:

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)

5 个答案:

答案 0 :(得分:1)

快速又脏,没有测试过这个。以递归方式使用检查和重命名功能将“_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)

答案 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