【原创】转载请注明作者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:\test.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!')

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

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

最新文章

  1. AngularJS之中级Route【二】(七)
  2. charles抓包工具
  3. weblogic 12C 数据源配置出错的解决办法
  4. std::list
  5. java里的基本数据类型
  6. jq--回到顶部
  7. AVR GCC对端口的操作指南
  8. UVa 10917 A Walk Through the Forest
  9. NTSC色域(CIE1931)计算公式
  10. J2SE基本数据结构
  11. 简单介绍java Enumeration
  12. 消除input,button之间的间距
  13. 电梯调度编写(oo-java编程)
  14. OFBiz项目简介
  15. poj1164 The Castle
  16. react一看就会的简单路由设置
  17. spring boot 配置注入
  18. VirtualBOX启动错误the vm session was closed before any attempt to power it on解决办法
  19. C++ Style Languages: C++, Objective-C, Java, C#
  20. C# 对json对象嵌套数组

热门文章

  1. 如何设置mysql远程访问
  2. 使用DeepWalk从图中提取特征
  3. TensorFlow v2.0的基本张量操作
  4. SVM多核学习方法简介
  5. jmeter4.0介绍一
  6. Codeforces 杂题集 2.0
  7. SpringCloud入门(九): Zuul 上传&回退&异常处理&跨域
  8. 2020年Java多线程与并发系列22道高频面试题(附思维导图和答案解析)
  9. 实践指路明灯,源码剖析flink-metrics
  10. JavaScript-原始值和引用值