Day5:python文件处理——自动备份销售数据与异常日志

66 阅读2分钟

目标:掌握CSV/JSON文件读写,实现自动化数据备份与日志记录


一、CSV文件操作(销售数据备份)

1. 写入CSV文件

import csv

# 销售数据
sales_data = [
    ["日期", "商品", "销量", "销售额"],
    ["2024-03-01", "手机", 15, 59985],
    ["2024-03-01", "笔记本", 8, 71992]
]

with open("daily_sales.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerows(sales_data)  # 注意是writerows(多行写入)

2. 读取CSV文件(含数据处理)

import csv

total_sales = 0
with open("daily_sales.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    next(reader)  # 跳过标题行
    for row in reader:
        total_sales += float(row[3])  # 累加销售额列

print(f"当日总销售额:{total_sales:.2f}元")

二、JSON文件操作(配置管理)

1. 保存系统配置

import json

config = {
    "backup_path": "/data/backups",
    "max_log_days": 30,
    "alert_email": "admin@company.com"
}

with open("config.json", "w", encoding="utf-8") as f:
    json.dump(config, f, indent=2)  # indent美化格式

2. 读取配置

with open("config.json", "r", encoding="utf-8") as f:
    config = json.load(f)

print(f"备份路径:{config['backup_path']}")

三、企业级实战:自动备份与异常日志

1. 需求说明

  • 每小时备份销售数据到CSV(增量追加)
  • 记录程序运行异常到error.log

2. 完整实现

import csv
import json
from datetime import datetime

def backup_sales(new_data):
    """增量备份销售数据"""
    try:
        with open("sales_backup.csv", "a", newline="", encoding="utf-8") as f:
            writer = csv.writer(f)
            # 添加备份时间戳
            new_data_with_time = [datetime.now().strftime("%Y-%m-%d %H:%M")] + new_data
            writer.writerow(new_data_with_time)
    except Exception as e:
        log_error(f"备份失败: {str(e)}")

def log_error(message):
    """记录错误日志"""
    with open("error.log", "a", encoding="utf-8") as f:
        log_entry = {
            "timestamp": datetime.now().isoformat(),
            "error": message
        }
        f.write(json.dumps(log_entry) + "\n")

# 模拟数据更新
backup_sales(["平板", 12, 35988])

四、今日任务清单

  • 修改备份程序,添加CSV标题行(仅首次运行时创建)
  • 实现JSON配置读取,动态设置备份路径
  • 扩展错误日志,记录发生错误的原始数据

高频问题排查

  1. 文件乱码 → 确保统一使用utf-8编码
  2. 权限拒绝 → 检查文件是否被其他程序占用
  3. 路径错误 → 使用绝对路径或os.path模块处理路径