Python实现每次运行程序自动修改文件名并保存至独立文件夹
两种简洁实现:自动命名文件并保存到独立文件夹
嘿,作为Python新手,你的需求其实特别常见,我来给你两个清爽的解决方案,分别对应日期命名和计数器命名,还帮你搞定自动创建文件夹的问题,不用手动操心~
一、用文件创建日期命名(推荐更简洁的写法)
你之前的日期拼接方式有点啰嗦,Python的datetime模块里的strftime方法可以直接生成格式化的日期字符串,再结合pathlib(Python3.4+自带,比os.path更直观)来处理路径,代码会简洁很多:
from datetime import datetime from pathlib import Path import pandas as pd # 定义目标文件夹路径 target_folder = Path(r"C:\bla\bla\path\to\your_folder") # 自动创建文件夹(如果不存在的话) target_folder.mkdir(exist_ok=True) # 生成带日期的文件名,比如"xml_2024_05_20.xml" current_date = datetime.now().strftime("%Y_%m_%d") file_path = target_folder / f"xml_{current_date}.xml" # 写入文件 with open(file_path, "w+") as f: for index, row in df.iterrows(): xml_content = csv_to_xml(row) print(xml_content) f.write(xml_content)
解释一下:
strftime("%Y_%m_%d")直接生成年_月_日格式的字符串,比手动拼接月份、日期、年份省心多了,还能自动补零(比如5月会变成05)Path.mkdir(exist_ok=True)会自动创建文件夹,如果文件夹已经存在也不会报错,很安全- 用
/拼接路径是pathlib的特色,比os.path.join更直观
如果想要更精确的时间(比如到时分秒,避免同一天多次运行覆盖文件),可以把日期格式改成"%Y_%m_%d_%H_%M_%S",生成类似xml_2024_05_20_14_30_25.xml的文件名。
二、用计数器命名(自动递增不重复)
如果想用计数器命名,核心是先统计目标文件夹里已有的同名前缀文件,然后取最大的数字加1。这里用glob模块来匹配文件,代码也很简洁:
import glob from pathlib import Path import pandas as pd target_folder = Path(r"C:\bla\bla\path\to\your_folder") target_folder.mkdir(exist_ok=True) # 匹配文件夹里所有以"xml_"开头、".xml"结尾的文件 existing_files = glob.glob(str(target_folder / "xml_*.xml")) # 提取已有文件的数字部分,比如从"xml_3.xml"里拿到3 counts = [] for file in existing_files: try: # 分割文件名,提取数字 num = int(Path(file).stem.split("_")[-1]) counts.append(num) except ValueError: # 如果有不符合命名规则的文件,跳过 continue # 确定下一个计数器数字,没有文件的话从1开始 next_count = max(counts) + 1 if counts else 1 file_path = target_folder / f"xml_{next_count}.xml" # 写入文件 with open(file_path, "w+") as f: for index, row in df.iterrows(): xml_content = csv_to_xml(row) print(xml_content) f.write(xml_content)
解释一下:
glob.glob可以快速匹配符合规则的文件,不用自己遍历文件夹- 提取数字的时候加了异常处理,避免文件夹里有其他命名格式的文件导致报错
- 自动判断起始数字,如果文件夹是空的,就从
xml_1.xml开始
小提示
- 如果你用的是Python3.6+,
f-string(就是f"xml_{current_date}"这种写法)是格式化字符串最方便的方式,一定要掌握~ - 两种方式可以结合,比如日期+计数器,比如
xml_2024_05_20_1.xml,适合同一天需要生成多个文件的场景
内容的提问来源于stack exchange,提问作者Johannes
相关产品推荐
相关产品推荐

