最初的工作文件夹是通过在项目目录下进行新建文件夹并修改命名来实现的,将每天所执行、修改的程序保存在其中以方便后续查阅。
后续工作中,新增了一个python脚本代码,用来作为便携机的IP地址修改,方便调试设备的时候用不同IP地址快速通讯上,便在程序中添加了开启后窗口后新建文件夹的功能。
#修改新增当天日期的日志
def create_daily_folder(base_path):
# 获取当前日期,格式化为mmdd
now = datetime.now()
today = f"{now.month:}月{now.day:02d}日"
# 指定要创建的文件夹名称
folder_name = f"{today}任务列表"
# 定义完整路径
path = os.path.join(base_path, folder_name)
# 如果文件夹不存在,则创建它
if not os.path.exists(path):
os.makedirs(path)
print(f'创建了新文件夹: {folder_name}')
else:
print(f'文件夹已存在: {folder_name}')
# 调用函数,传入目标目录
create_daily_folder('D:\obsidian\项目资料\xx')
后续使用的时候发现并不会用到修改IP或者打开其他软件的功能,便整合为仅新建文件夹的代码,并通过运行.bat文件进行python脚本的运行(比较简单,快速稳定实现),并将.bat文件加入到开机启动的目录中,实现开机启动,使得项目文件夹可以创建成功,省略每天使用电脑的工作中,大约2分钟左右的时间去执行这个文件夹创建工作。
目前该代码已经稳定运行了91天,符合设计这个代码脚本的初衷,实现工作上部分繁琐工作的省略。后附完整代码,可供参考。
import sys
import configparser
from datetime import datetime
import logging
from pathlib import Path
import os
# Configure logging with UTF-8 encoding
logging.basicConfig(
filename='folder_creator.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
encoding='utf-8'
)
logger = logging.getLogger(__name__)
def is_valid_path(path: str) -> bool:
"""Check if path contains invalid characters"""
import re
invalid_chars = r'[^\x00-\x7F\u4E00-\u9FFF\\:a-zA-Z0-9_\s]'
return not bool(re.compile(invalid_chars).search(path))
def create_daily_folder(base_path: str) -> bool:
"""Create daily task folder using pathlib for Unicode support"""
try:
now = datetime.now()
folder_name = f"{now.month:d}月{now.day:02d}日任务列表"
path = Path(base_path) / folder_name
# Ensure parent directories exist
path.parent.mkdir(parents=True, exist_ok=True)
path.mkdir(exist_ok=True)
logger.info(f'Created folder: {path}')
logger.handlers[0].flush() # Force log flush to ensure immediate saving
return True
except (PermissionError, OSError) as e:
logger.error(f"Failed to create folder at {base_path}: {str(e)}")
return False
except Exception as e:
logger.error(f"Unexpected error creating folder at {base_path}: {str(e)}")
return False
def load_config() -> configparser.ConfigParser:
"""Load configuration from config.ini"""
config = configparser.ConfigParser()
config_path = Path(__file__).parent / 'config.ini'
if not config_path.exists():
logger.error(f"Configuration file 'config.ini' not found at {config_path}")
config.read(config_path, encoding='utf-8')
return config
def get_log_path() -> str:
"""Get log path from config with validation"""
default_path = r'D:\obsidian\项目资料\xx' # Changed to a more accessible default path
try:
config = load_config()
log_path = config.get('Settings', 'log_path', fallback=default_path)
if not is_valid_path(log_path):
logger.warning(f"Invalid log path: {log_path}. Using default: {default_path}")
return default_path
return log_path
except Exception as e:
logger.error(f"Error loading log path: {str(e)}. Using default: {default_path}")
return default_path
def main():
"""Main entry point"""
try:
# Get log path and create folder
log_path = get_log_path()
if create_daily_folder(log_path):
logger.info("Folder creation successful, exiting")
else:
logger.info("Folder creation failed, exiting with error")
except Exception as e:
logger.error(f"Unexpected error in main: {str(e)}")
if __name__ == "__main__":
main()