• Python


    【原创】转载请注明作者Johnthegreat和本文链接。

    在一些不多的数据下载和生成的时候,我们倾向于直接保存为文件,当我们修改某些参数后再一次运行时,之前运行时生成的文件就被覆盖了。为了解决这个问题,这里提供几个解决方案。

    方案一思路:

    1. 判断文件是否存在;

    2. 判断是否带有”0)“这种数字带括号的格式;

    3. 文件名添加”(0), (1), (2)….“之类的编号。

    以下是方案一代码:

    import os
    import re
    
    
    def auto_save_file(path):
        directory, file_name = os.path.split(path)
        while os.path.isfile(path):
            pattern = '(d+)).'
            if re.search(pattern, file_name) is None:
                file_name = file_name.replace('.', '(0).')
            else:
                current_number = int(re.findall(pattern, file_name)[-1])
                new_number = current_number + 1
                file_name = file_name.replace(f'({current_number}).', f'({new_number}).')
            path = os.path.join(directory + os.sep + file_name)
        return path
    

      

    如果使用如下创建文件的代码测试:

    path = r'D:	est.txt'
    for i in range(10):
        with open(auto_save_file(path), 'w') as f:
            f.write('This is a test!')

    结果如下:

    方案二思路:

    来自(https://blog.csdn.net/yyly2012/article/details/79106554

    1. 使用os.path.isfile判断文件是否存在
    2. 使用递归函数判断
    3. 添加编号时, 使用可变list 传值n=[0]

    import os
    
    def check_filename_available(filename):
        n=[0]
        def check_meta(file_name):
            file_name_new=file_name
            if os.path.isfile(file_name):
                file_name_new=file_name[:file_name.rfind('.')]+'_'+str(n[0])+file_name[file_name.rfind('.'):]
                n[0]+=1
            if os.path.isfile(file_name_new):
                file_name_new=check_meta(file_name)
            return file_name_new
        return_name=check_meta(filename)
        return return_name
    with open(check_filename_available('t.txt'),'w') as f:
        f.write('Checking func!')

    方案二使用了闭包函数来实现,也很巧妙。

    以上都是通用型代码,直接在代码里面添加这个函数就可以用了,有问题欢迎联系我。

  • 相关阅读:
    重构与模式:改善代码三部曲中的第三部
    将博客搬至CSDN
    管理之道(二十二)
    管理之道(二十一)
    管理之道(二十)
    管理之道(十九)
    管理之道(十八)
    管理之道(十七)
    管理之道(十六)
    管理之道(十五)
  • 原文地址:https://www.cnblogs.com/johnthegreat/p/12748790.html
Copyright © 2020-2023  润新知