用Python实现发送《自动周报》实战脚本

-- coding: utf-8 --

"""

《自动周报》实战脚本:把分散在多张 CSV 里的销售明细,

一键 合并 → 清洗 → 汇总 → 导出成 Excel 周报。

依赖:pip install pandas openpyxl

运行:python auto_weekly_report.py

首次运行会自动在 sales_raw/ 下造一批示例数据(含脏数据),开箱即跑。

"""

import pandas as pd

import glob

import os

import random

DATA_DIR = "sales_raw"

OUTPUT = "周报_汇总.xlsx"

def 造示例数据():

"""没有原始数据就自动造一批(含脏数据),保证开箱即跑。"""

os.makedirs(DATA_DIR, exist_ok=True)

random.seed(42)

for day in ("周一", "周二", "周三"):

n = 50

rows = \[\]

for i in range(n):

rows.append({

"日期": day,

"销售员": random.choice("张三", "李四", "王五", None),

"地区": random.choice("华东", "华南", "华北"),

"金额": random.choice("缺失" + random.randint(100, 5000) for _ in range(5)),

"订单号": 1000 + i,

})

pd.DataFrame(rows).to_csv(

os.path.join(DATA_DIR, f"销售_{day}.csv"),

index=False, encoding="utf-8-sig")

print(f"已在 {DATA_DIR}/ 造好示例数据")

def 合并明细(data_dir):

"""目录下所有 CSV 拼成一张大表。"""

files = glob.glob(os.path.join(data_dir, "*.csv"))

return pd.concat(pd.read_csv(f) for f in files, ignore_index=True)

def 清洗(df):

"""去重 + 金额转数值(脏数据变 0)+ 销售员空值兜底。"""

df = df.drop_duplicates()

df"金额" = pd.to_numeric(df"金额", errors="coerce").fillna(0)

df"销售员" = df"销售员".fillna("未知")

return df

def 出周报(df, output):

"""按销售员汇总 + 按地区透视,导出多 sheet 的 Excel。"""

by_person = (df.groupby("销售员")"金额"

.agg(总成交额="sum", 单数="count")

.sort_values("总成交额", ascending=False))

by_region = df.pivot_table(index="地区", values="金额",

aggfunc="sum", fill_value=0)

with pd.ExcelWriter(output, engine="openpyxl") as xw:

df.to_excel(xw, sheet_name="原始明细", index=False)

by_person.to_excel(xw, sheet_name="按销售员")

by_region.to_excel(xw, sheet_name="按地区")

return by_person, by_region

if name == "main ":

if not glob.glob(os.path.join(DATA_DIR, "*.csv")):

造示例数据()

raw = 合并明细(DATA_DIR)

clean = 清洗(raw)

person, region = 出周报(clean, OUTPUT)

print(f"原始 {len(raw)} 行 → 清洗后 {len(clean)} 行")

print("周报已生成:", OUTPUT)

print("\n按销售员 Top:")

print(person.head())

相关推荐
满怀冰雪5 分钟前
24-PaddleClas 模型评估、导出与推理部署入门
大数据·人工智能·python·深度学习·paddle
Chester_19995 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
DeepVisionary6 小时前
谷歌 Gemini Omni 1.1 Flash 正式发布:4K 视频、40 秒场景延伸,视频生成进入按 token 计费时代
python·自动化
阡之尘埃6 小时前
Python数据分析案例85——大模型微调全流程(SFT的LoRA微调)
人工智能·python·深度学习·语言模型·llm·微调·千问
海兰6 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(三)
javascript·python·金融
EXI-小洲6 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
cvcode_study6 小时前
Ollama+ComfyUI 多模态
大数据·人工智能·python
会周易的程序员7 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导7 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan7 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt