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编码冲突,就会 ...
随机推荐
- leetcode 876. 链表的中间结点 签到
题目: 给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式: ...
- Go语言micro之快速搭建微服务
背景 go-micro给我们提供了一个非常便捷的方式来快速搭建微服务,而且并不需要提前系统了解micro,下面用一个简单的示例来快速实现一个服务. 创建Proto文件 因为我们要做微服务,那么就一定有 ...
- Kaggle竞赛入门:决策树算法的Python实现
本文翻译自kaggle learn,也就是kaggle官方最快入门kaggle竞赛的教程,强调python编程实践和数学思想(而没有涉及数学细节),笔者在不影响算法和程序理解的基础上删除了一些不必要的 ...
- ImportError: libpng12.so.0: cannot open shared object file: No such file or directory
原因:动态链接库丢失或路径找不到 解决:执行下列命令即可 wget -q -O /tmp/libpng12.deb http://mirrors.kernel.org/ubuntu/pool/main ...
- 白话web安全
伤心往事 梦回大二,那时候沉迷于毒奶粉,甚至国庆都在宿舍与毒奶粉共同度过,但是却发生了一件让我迄今难忘的事情~ 我新练的黑暗武士被盗了!!!干干净净!!! 虽然过了好久了,但是记忆犹新啊,仿佛发生在昨 ...
- 【cs224w】Lecture 3 - Motif, Graphlet 及 结构性角色
目录 Network Motifs Configuration Model Graphlets How to Find Motifs and Graphlets Structural Roles 转自 ...
- UITextFiled-集合目录
键盘弹起遮挡输入输入框(UITextFiled或者UITextView) 对于键盘弹起遮挡输入框的问题以前也想过解决办法比如:监听系统键盘弹出通知.根据每个控件所在 ...
- 当阿里面试官问我:Java创建线程有几种方式?我就知道问题没那么简单
这是最新的大厂面试系列,还原真实场景,提炼出知识点分享给大家. 点赞再看,养成习惯~ 微信搜索[武哥聊编程],关注这个 Java 菜鸟. 昨天有个小伙伴去阿里面试实习生岗位,面试官问他了一个老生常谈的 ...
- JDK常用命令行工具使用
- 检查mysql表碎片化脚本
#!/bin/sh echo -n "MySQL username: " ; read username echo -n "MySQL password: " ...