首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >我用 Python 写了个工具帮自己省了每周3小时

我用 Python 写了个工具帮自己省了每周3小时

作者头像
用户11081884
发布2026-07-20 20:25:32
发布2026-07-20 20:25:32
370
举报

每周三下午,我都会被同一个“仪式”困住半小时。

不是开会,而是机械地打开邮箱,从几十封邮件里,一封封找出“财务报销审批通过”的邮件,下载附件,重命名为“报销单张三20260508.pdf”,然后拖进一个叫“本周已处理”的文件夹。

每周五早上,我还要花一小时,手动把销售同事发来的5个Excel表格,合并成一个,再生成几张柱状图,贴进周报PPT里。

这些事,琐碎、重复、毫无创造性,却雷打不动地占用着我每周近3个小时。直到上个月,我实在忍无可忍,决定让电脑自己干。

简单来说就是:

与其抱怨时间不够用,不如写几行代码,把时间偷回来。


案例一:邮件附件自动“归位”与归档

痛点: 手动筛选、下载、重命名邮件附件,耗时费力还容易漏。每周都要花近半小时在这件小事上。

我用Python的 imaplibemail 库,写了一个不到50行的脚本,让它每天下午4点自动运行。

代码语言:javascript
复制
importimaplib
importemail
importos
fromdatetimeimportdatetime

defauto_fetch_invoice_attachments():
    # 连接到邮箱(这里以QQ邮箱为例)
    mail = imaplib.IMAP4_SSL('imap.qq.com')
    mail.login('你的邮箱@qq.com', '你的授权码')  # 注意:用授权码,不是密码!
    mail.select('inbox')

    # 搜索主题包含“报销审批通过”的未读邮件
    _, message_nums = mail.search(None, '(UNSEEN SUBJECT "报销审批通过")')
    
    fornuminmessage_nums[0].split():
        _, msg_data = mail.fetch(num, '(RFC822)')
        email_msg = email.message_from_bytes(msg_data[0][1])
        
        # 从发件人提取姓名(假设发件人格式是“张三 <zhangsan@company.com>”)
        sender = email_msg['From']
        name = sender.split('<')[0].strip() if'<'insenderelse'未知'
        
        forpartinemail_msg.walk():
            ifpart.get_content_disposition() == 'attachment':
                filename = part.get_filename()
                iffilenameandfilename.lower().endswith('.pdf'):
                    # 生成新文件名:报销单_姓名_年月日.pdf
                    today = datetime.now().strftime('%Y%m%d')
                    new_filename = f'报销单_{name}_{today}.pdf'
                    
                    # 保存到指定文件夹
                    save_path = os.path.join('/Users/你/Desktop/本周已处理', new_filename)
                    withopen(save_path, 'wb') asf:
                        f.write(part.get_payload(decode=True))
                    print(f'已保存: {new_filename}')
    
    mail.close()
    mail.logout()

# 可以配合系统定时任务(如crontab或Windows任务计划程序)每天自动执行

效果: 现在,每天下午4点05分,我的“本周已处理”文件夹里就会自动出现整理好的报销单。我只需要每周五下班前花2分钟检查一下。每周省时:约0.5小时。

案例二:Excel周报数据自动合并与可视化

痛点: 手动合并多个Excel,复制粘贴做图表,枯燥易错。每周五上午雷打不动的一小时“数据搬运工”。

我用 pandasmatplotlib,写了一个更强大的脚本。

代码语言:javascript
复制
importpandasaspd
importmatplotlib.pyplotasplt
importos
fromdatetimeimportdatetime

defauto_generate_weekly_report():
    report_date = datetime.now().strftime('%Y%m%d')
    input_folder = '/Users/你/Desktop/销售数据'
    output_file = f'/Users/你/Desktop/周报/销售汇总_{report_date}.xlsx'
    chart_folder = f'/Users/你/Desktop/周报/图表_{report_date}'
    
    # 1. 自动合并所有Excel
    all_data = []
    forfileinos.listdir(input_folder):
        iffile.endswith('.xlsx'):
            df = pd.read_excel(os.path.join(input_folder, file))
            df['数据来源'] = file.replace('.xlsx', '')  # 标记来源
            all_data.append(df)
    
    ifnotall_data:
        print("没有找到Excel文件")
        return
    
    merged_df = pd.concat(all_data, ignore_index=True)
    
    # 2. 保存合并后的总表
    merged_df.to_excel(output_file, index=False)
    print(f'数据已合并保存至: {output_file}')
    
    # 3. 自动生成图表
    os.makedirs(chart_folder, exist_ok=True)
    
    # 示例:按“数据来源”汇总销售额
    if'销售额'inmerged_df.columnsand'数据来源'inmerged_df.columns:
        summary = merged_df.groupby('数据来源')['销售额'].sum().sort_values(ascending=False)
        
        # 生成柱状图
        plt.figure(figsize=(10, 6))
        summary.plot(kind='bar', color='skyblue')
        plt.title('各渠道本周销售额汇总', fontsize=14)
        plt.xlabel('渠道')
        plt.ylabel('销售额(元)')
        plt.xticks(rotation=45)
        plt.tight_layout()
        plt.savefig(os.path.join(chart_folder, '销售额柱状图.png'), dpi=300)
        plt.close()
        
        # 生成饼图
        plt.figure(figsize=(8, 8))
        plt.pie(summary.values, labels=summary.index, autopct='%1.1f%%', startangle=90)
        plt.title('销售额渠道占比', fontsize=14)
        plt.savefig(os.path.join(chart_folder, '销售额占比饼图.png'), dpi=300)
        plt.close()
        
        print(f'图表已生成至文件夹: {chart_folder}')
    
    print("周报数据准备完毕!")

# 可以设定每周五上午10点自动运行

效果: 现在,我每周五早上到公司,喝杯咖啡的功夫,脚本已经帮我把5个表格合并好,生成了漂亮的柱状图和饼图,静静躺在文件夹里。我只需要把图片拖进PPT。每周省时:约2小时。

案例三:下载文件夹自动分类整理

痛点: 下载文件夹是重灾区,图片、文档、压缩包全混在一起,找文件如同大海捞针。每天浪费的碎片时间累积起来很可观。

我用 shutil 库写了个“桌面清洁工”,设定每次开机后运行一次。

代码语言:javascript
复制
importos
importshutil

defauto_organize_downloads():
    downloads_path = '/Users/你/Downloads'
    
    # 定义分类规则
    categories = {
        '图片': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg'],
        '文档': ['.pdf', '.docx', '.doc', '.xlsx', '.xls', '.pptx', '.txt'],
        '压缩包': ['.zip', '.rar', '.7z', '.tar.gz'],
        '安装包': ['.dmg', '.pkg', '.exe', '.msi'],
        '音频视频': ['.mp3', '.mp4', '.avi', '.mov', '.wav']
    }
    
    forfilenameinos.listdir(downloads_path):
        file_path = os.path.join(downloads_path, filename)
        
        # 跳过文件夹和隐藏文件
        ifos.path.isdir(file_path) orfilename.startswith('.'):
            continue
            
        # 按后缀分类
        moved = False
        forfolder, extensionsincategories.items():
            ifany(filename.lower().endswith(ext) forextinextensions):
                dest_folder = os.path.join(downloads_path, folder)
                os.makedirs(dest_folder, exist_ok=True)
                shutil.move(file_path, os.path.join(dest_folder, filename))
                moved = True
                break
        
        # 未分类的放入“其他”
        ifnotmoved:
            other_folder = os.path.join(downloads_path, '其他')
            os.makedirs(other_folder, exist_ok=True)
            shutil.move(file_path, os.path.join(other_folder, filename))
    
    print("下载文件夹整理完毕!")

# 可以添加到开机启动项或每天第一次启动浏览器时运行

效果: 从此,我的下载文件夹再也没有乱过。找文件从“大海捞针”变成了“开柜即取”。每周省时:约0.5小时(积少成多)。

案例四:网站数据自动监控与告警

痛点: 需要每天手动打开几个竞品网站或数据看板,查看关键指标(如价格、库存、排名),一旦有变动需要立即记录。这个过程既枯燥又容易错过重要变化。

我用 requestsBeautifulSoup 写了个爬虫监控脚本,搭配企业微信机器人推送告警。

代码语言:javascript
复制
importrequests
frombs4importBeautifulSoup
importtime
importhashlib

defmonitor_website_price(url, selector, webhook_url):
    """监控特定网页上某个元素的价格变化"""
    try:
        headers = {'User-Agent': 'Mozilla/5.0'}
        resp = requests.get(url, headers=headers, timeout=10)
        soup = BeautifulSoup(resp.text, 'html.parser')
        
        target_element = soup.select_one(selector)
        ifnottarget_element:
            return"未找到目标元素"
        
        current_price = target_element.text.strip()
        # 生成当前内容的哈希值,用于判断是否变化
        current_hash = hashlib.md5(current_price.encode()).hexdigest()
        
        # 这里应该从文件或数据库读取上一次的哈希值进行对比
        # 假设我们有一个简单的文件来存储上次的状态
        record_file = 'last_state.txt'
        try:
            withopen(record_file, 'r') asf:
                last_hash = f.read().strip()
        exceptFileNotFoundError:
            last_hash = ''
        
        ifcurrent_hash!= last_hash:
            # 价格发生变化,发送企业微信通知
            message = f"🔔 监控告警!\n页面: {url}\n目标元素内容已更新:\n{current_price}"
            send_wechat_notification(webhook_url, message)
            
            # 更新记录
            withopen(record_file, 'w') asf:
                f.write(current_hash)
            return"检测到变化,已通知"
        else:
            return"无变化"
            
    exceptExceptionase:
        returnf"监控出错: {e}"

defsend_wechat_notification(webhook_url, content):
    """通过企业微信机器人发送通知"""
    data = {
        "msgtype": "text",
        "text": {
            "content": content
        }
    }
    requests.post(webhook_url, json=data)

# 示例:监控某商品价格,每2小时检查一次
# while True:
#     result = monitor_website_price(
#         'https://example.com/product/123',
#         '.price-selector',
#         'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY'
#     )
#     print(f"{time.ctime()}: {result}")
#     time.sleep(2 * 60 * 60)  # 2小时

效果: 现在,我不再需要每天手动检查。一旦监控的目标价格或库存发生变化,企业微信会立即给我推送消息。每周省时:约1小时(从每天多次检查变为被动接收告警)。

案例五:社交媒体内容自动备份与发布

痛点: 作为运营,需要将同一篇内容(如活动通知)手动发布到微信公众号、知乎、小红书等多个平台,格式调整、图片上传非常繁琐。每周都要花数小时做这种“复制粘贴”工作。

我用 selenium 自动化浏览器操作,虽然代码稍复杂,但一劳永逸。

代码语言:javascript
复制
fromseleniumimportwebdriver
fromselenium.webdriver.common.byimportBy
fromselenium.webdriver.common.keysimportKeys
importtime

defauto_post_to_zhihu(title, content, image_paths=None):
    """自动发布内容到知乎(简化示例,实际需要处理登录、验证码等)"""
    driver = webdriver.Chrome()  # 需要安装ChromeDriver
    
    try:
        # 1. 登录(这里省略具体登录逻辑,实际可能需要处理验证码)
        driver.get('https://www.zhihu.com/signin')
        time.sleep(3)
        # ... 填写用户名密码登录
        
        # 2. 进入发布页面
        driver.get('https://zhuanlan.zhihu.com/write')
        time.sleep(2)
        
        # 3. 填写标题
        title_input = driver.find_element(By.CSS_SELECTOR, '.WriteIndex-titleInput')
        title_input.clear()
        title_input.send_keys(title)
        
        # 4. 填写内容
        content_area = driver.find_element(By.CSS_SELECTOR, '.DraftEditor-editorContainer')
        content_area.click()
        # 通过JavaScript直接设置内容(更稳定)
        driver.execute_script(f"""
            document.querySelector('.DraftEditor-editorContainer [contenteditable="true"]').innerHTML = '{content}';
        """)
        
        # 5. 上传图片(如果有)
        ifimage_paths:
            upload_btn = driver.find_element(By.CSS_SELECTOR, '.WriteIndex-uploadButton')
            forimg_pathinimage_paths:
                upload_btn.send_keys(img_path)
                time.sleep(1)  # 等待上传完成
        
        # 6. 选择话题、设置权限等(根据实际需要添加)
        
        # 7. 发布(这里注释掉,避免误操作)
        # publish_btn = driver.find_element(By.CSS_SELECTOR, '.WriteIndex-publishButton')
        # publish_btn.click()
        
        print("知乎内容已填写完成,请手动检查后发布")
        time.sleep(5)
        
    finally:
        driver.quit()

# 类似地,可以编写发布到其他平台的函数
# 然后创建一个主函数,依次调用各个平台的发布函数

效果: 虽然首次设置需要一些时间,但之后每次发布,我只需要运行一次脚本,它就会自动帮我填写好所有平台的内容,我只需要做最后的检查确认。每周省时:约2小时(多平台发布)。


我是怎么做到的?(给新手的5条建议)

如果你也心动了,但觉得“写代码太难”,听听我的路径:

  1. 从最痛的那个点开始: 别想着一口吃成胖子。先选一个你最厌烦、最重复的任务动手。哪怕一开始代码写得丑、效率低,只要能跑起来,就是胜利。
  2. 善用搜索和“借鉴”: 我80%的代码都是从搜索引擎(如“Python 如何读取邮件附件”)和类似 @20个Python实用脚本 这样的文章里学来、改来的。编程很多时候是“组装”的艺术。
  3. 让工具自己运行: 写好脚本不是终点。学会使用系统的定时任务(Mac/Linux的 crontab,Windows的“任务计划程序”),或者用 schedule 库让Python脚本自己定时循环,才能真正解放你。
  4. 安全第一: 像邮箱密码、API密钥这些敏感信息,千万不要直接写在代码里!学会使用环境变量(比如在.env文件里写 EMAIL_PASSWORD=xxx,在代码里用 os.getenv('EMAIL_PASSWORD') 读取)。
  5. 从简单到复杂: 先搞定文件操作(案例一、二、三),再尝试网络请求(案例四),最后挑战浏览器自动化(案例五)。每一步的成功都会给你继续下去的信心。

这每周省下的3小时,不是从工作中“挤”出来的,而是从重复劳动中“偷”回来的。

“无他,惟手熟尔”!有需要的用起来!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 案例一:邮件附件自动“归位”与归档
  • 案例二:Excel周报数据自动合并与可视化
  • 案例三:下载文件夹自动分类整理
  • 案例四:网站数据自动监控与告警
  • 案例五:社交媒体内容自动备份与发布
  • 我是怎么做到的?(给新手的5条建议)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档