Python编写for循环实现按日期建文件夹存储服务器消息求助
Python按日期自动归档消息程序实现思路
先修正你现有代码的两处明显错误
output = print("Something ...")这行有问题:print()函数的返回值是None,你把None写入文件会直接报错。需要先把要存储的内容赋值给变量,再单独执行打印、写入操作。- 你当前的代码是单次执行逻辑,没有实现持续运行、每次写入前校验目录的要求。
核心实现思路,你按照这几步改就行
- 封装目录自动创建函数
每次收到消息要写入前,都调用这个函数获取当前最新的日期目录:函数里每次都取当前系统时间生成目录路径,用os.makedirs的exist_ok=True参数,不用自己写判断逻辑,目录不存在会自动创建,已存在也不会报错,天然满足你每次校验的要求,还能自动处理跨天日期切换的问题。 - 实现持续运行的监听逻辑
用while True死循环实现进程持续运行,中间加你对接服务器接收消息的逻辑就行,暂时可以先用sleep模拟接收消息的间隔。 - 优化文件写入逻辑
用with open()上下文管理器操作文件,不用手动调用close(),哪怕写入过程报错也不会出现资源泄漏;如果同一分钟内有多条消息要写入,把打开模式改成追加模式a,避免覆盖之前的内容。
完整可运行参考代码
import os import datetime import time def get_current_date_dir(): # 每次调用都获取最新的日期,自动适配跨天 current_date = datetime.datetime.now().strftime("%Y-%m-%d") dir_path = f"D:/Dir/Dir_{current_date}" # exist_ok=True 自动处理目录存在与否的逻辑,不用手动判断 os.makedirs(dir_path, exist_ok=True) return dir_path def save_message_to_file(message): # 先获取最新的日期目录 date_dir = get_current_date_dir() # 生成当前时间的文件名,你可以按自己需求调整精度,比如按小时就去掉%M current_time_str = datetime.datetime.now().strftime("%Y-%m-%d_%H%M") file_path = os.path.join(date_dir, f"file_{current_time_str}.txt") # a模式是追加写入,同个时间的多条消息不会覆盖,换成w就是覆盖 with open(file_path, "a", encoding="utf-8") as f: # 每条消息加换行分隔 f.write(f"{message}\n") print(f"消息已写入:{file_path}") if __name__ == "__main__": print("消息接收程序已启动,持续运行中...") while True: # 这里替换成你实际对接服务器接收消息的逻辑 # 以下是模拟接收消息的测试代码 test_msg = f"测试消息,接收时间:{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}" print(f"收到消息:{test_msg}") save_message_to_file(test_msg) # 模拟每10秒收到一条消息,实际使用可以去掉,换成阻塞式的消息接收接口 time.sleep(10)
关键逻辑说明
- 不用专门做日期切换的判断:每次写入前都重新获取当前时间生成目录和文件名,跨天的时候会自动生成新的日期目录,完全符合你的需求。
os.makedirs的exist_ok=True参数已经覆盖了你要求的「每次操作前校验文件夹状态,不存在则创建」的逻辑,比你自己写if os.path.exists更简洁,也避免了多进程同时创建目录的竞态问题。- 如果需要写入的是实时日志类的内容,也可以调整文件名的时间精度,比如按小时命名,避免生成太多小文件。
内容的提问来源于stack exchange,提问作者danio900409
相关产品推荐
相关产品推荐

