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:\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!')
方案二使用了闭包函数来实现,也很巧妙。
以上都是通用型代码,直接在代码里面添加这个函数就可以用了,有问题欢迎联系我。
Python - 实现文件名自动更改,避免同名文件被覆盖的两个解决方法的更多相关文章
- win7 创建vhd提示“找不到指定文件的虚拟磁盘支持提供程序”解决方法
本文参照:https://itbbs.pconline.com.cn/diy/16509116_2.html 14楼中"坚持不放弃"用户的答案得到解决 问题复现: 1.window ...
- VMware虚拟机提示“锁定文件失败 打不开磁盘”解决方法
VMware虚拟机提示“锁定文件失败 打不开磁盘”解决方法 摘自: http://www.xitongcheng.com/jiaocheng/xtazjc_article_40299.html 发布时 ...
- ASP.NET MVC 3 loginUrl自动变成Account/Login,并且发生404错误的解决方法
http://www.cnblogs.com/think8848/archive/2011/07/08/2100814.html ASP.NET MVC 3 loginUrl自动变成Account/L ...
- 用c#读取文件内容中文是乱码的解决方法:
用c#读取文件内容中文是乱码的解决方法: //方法1: StreamReader din = new StreamReader(@"C:\1.txt", System.Text.E ...
- 关于真机调试DDMS中的data文件夹打不开的解决方法
关于真机调试DDMS中的data文件夹打不开的解决方法 今天在开发的时候需要导出程序中的数据库文件查看数据,数据库文件默认就在/data/data/应用包名/databases/数据库名 这个路径下, ...
- jQuery之JSP加载JS文件不起作用的有效解决方法
JSP加载JS文件不起作用的有效解决方法 作者: 字体:[增加 减小] 类型:转载 时间:2014-04-08 jsp导入jquery文件,老是不起作用,原因在于其不能访问/WEB-INF/目录下的文 ...
- Python实现全局变量的两个解决方法
Python实现全局变量的两个解决方法 本文针对Python的全局变量实现方法简述如下: 先来看下面一段测试程序: count = 0 def Fuc(count): print coun ...
- 【转】【Python】python使用urlopen/urlretrieve下载文件时出现403 forbidden的解决方法
第一:urlopen出现403 #!/usr/bin/env python # -*- coding: utf- -*- import urllib url = "http://www.go ...
- 【Python】“UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9”根因及解决方法
背景 自动化测试调用HTMLTestRunner生成测试报告的时候,出现了编码错误,错误如题 原因 搜索了很多资料,得出的结论是python的str默认是ascii编码,和unicode编码冲突,就会 ...
随机推荐
- dvwa学习之七:SQL Injection
1.Low级别 核心代码: <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // Get input $id = $_REQUEST[ 'id' ]; ...
- 北邮OJ-257- 最近公共祖先-软件14 java
思路分析:思路应该比较简单也很容易想的来,就是比较两个节点的最近的祖先节点,要对每个节点依次记录下他的所有祖先节点,包括其自己,因为自己也算自己的祖先节点,这一点题目中没有明确指出 所以比较坑. 我们 ...
- fastai 官方教程之查看数据
本文为fastai官方教程编译版本.若有错误,欢迎指正. 总目录: *查看数据:本节为初级教程,介绍怎样快速的查看你的数据和模型预测结果.* 推理学习器(Inference Learner):本节为中 ...
- 深度学习框架Keras与Pytorch对比
对于许多科学家.工程师和开发人员来说,TensorFlow是他们的第一个深度学习框架.TensorFlow 1.0于2017年2月发布,可以说,它对用户不太友好. 在过去的几年里,两个主要的深度学习库 ...
- 食物图片变菜谱:这篇CVPR论文让人人都可以学习新料理
根据 Facebook 的统计,Instgram 上的美食图片数量已经超过 3 亿张.然而,获取食物烹饪方法的途径依然有限,例如,通过烹饪网站或相关教程.怎样能够挖掘丰富食物图片背后的烹饪方法,让每个 ...
- Java 泛型数组问题
Java中不支持泛型数组, 以下代码会编译报错:generic array creation ArrayList<Integer>[] listArr = new ArrayList< ...
- nim博弈 LightOJ - 1253
主要是写一下nim博弈的理解,这个题有点奇怪,不知道为什么判断奇偶性,如果有大佬知道还请讲解一下. //nim博弈 //a[0]~a[i] 异或结果为k 若k=0 则为平衡态 否则为非平衡态 //平衡 ...
- IDEA+Mybatis-generator代码生成工具
IDEA+Mybatis-generator代码生成工具(小白也能用) 插件介绍 MyBatis Generator简称MBG,是MyBatis 官方出的代码生成器.MBG能够自动生成实体类.Mapp ...
- Ubuntu命令方式安装中文语言包
Ubuntu命令方式安装中文语言包 安装之前执行 $LANG 查看语言环境 中文语言包: language-pack-zh-hans 简体中文 language-pack-zh-hans-base l ...
- Metrics:如何让线上应用更加透明?
1. 上期我们结合<SRE Google 运维解密>,对监控系统进行了一次脉络梳理,知道一旦离开了监控系统,我们就没法辨别一个服务是不是在正常提供服务,就如同线上的服务在随风裸奔. 文章分 ...