国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

幫財務小姐姐寫了幾個 Python 自動化腳本,結果...

開發 前端
大多數自動化項目失敗是因為他們試圖解決所有問題。相反,應該選擇一個重復出現的痛點,并且投資回報率可衡量。

某個無聊的下午,財務小姐姐找到了我,跟我說她厭倦了每周重復那些無聊的點擊操作,想要我幫忙開發一個工具,它可以:監控文件夾、從 PDF 中提取數據、豐富數據、推送報告。

我想,閑著也是閑著,就幫她這個忙吧,說不定還可以...咳咳咳

1. 我要解決的問題

大多數自動化項目失敗是因為他們試圖解決所有問題。相反,應該選擇一個重復出現的痛點,并且投資回報率可衡量。我的做法是:

痛點:

  • 客戶每天都會以分散的 PDF 格式發送發票。
  • 我手動打開它們,提取供應商、日期、金額,然后放入 excel。
  • 每天浪費約 20 分鐘。

目標:將其減少到零人力分鐘。

2. 快速 MVP — 構建文件監視器 + PDF 提取器

從小事做起:查看文件夾,檢測新的 PDF,提取文本。使用watchdogPyMuPDF(fitz)。

# file_watcher.py
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import fitz  # pymupdf

class PDFHandler(FileSystemEventHandler):
    def on_created(self, event):
        if event.src_path.lower().endswith(".pdf"):
            print(f"[+] New PDF: {event.src_path}")
            text = extract_text(event.src_path)
            print(text[:200], "...\n")  # quick preview

def extract_text(path: str) -> str:
    doc = fitz.open(path)
    pages = []
    for page in doc:
        pages.append(page.get_text())
    doc.close()
    return"\n".join(pages)

if __name__ == "__main__":
    observer = Observer()
    handler = PDFHandler()
    observer.schedule(handler, path="./inbox", recursive=False)
    observer.start()
    try:
        whileTrue:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

這個腳本已經將小姐姐每天的工作時間縮短至 5 分鐘——主要用于審查。

3. 增強提取器的魯棒性:OCR + 文本回退

部分 PDF 是掃描圖像。請添加pytesseract后備功能。

pip install pytesseract pill 
# 還必須在系統上安裝 tesseract (apt/brew/choco)
from PIL import Image
import pytesseract
import fitz

def extract_text_with_ocr(path: str) -> str:
    doc = fitz.open(path)
    aggregated = []
    for page in doc:
        text = page.get_text()
        if text.strip():
            aggregated.append(text)
        else:
            pix = page.get_pixmap(dpi=200)
            img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
            aggregated.append(pytesseract.image_to_string(img))
    doc.close()
    return"\n".join(aggregated)

這種混合方法(文本層 -> OCR)使該工具對我所見的 95% 的發票都具有可靠性。

4. 使用 OOP 構建結構——構建插件友好的管道

如果想要產品化,請將你的流程模塊化。每個步驟都是一個類:加載器 → 解析器 → 豐富器 → 接收器。這樣你就可以在不重寫代碼的情況下更換存儲(excel表格、數據庫、Webhook)。

# pipeline.py
from abc import ABC, abstractmethod
from typing import Dict

class Step(ABC):
    @abstractmethod
    def run(self, data: Dict) -> Dict:
        pass

class Loader(Step):
    def __init__(self, path): self.path = path
    def run(self, data):
        data['text'] = extract_text_with_ocr(self.path)
        return data

class Parser(Step):
    def run(self, data):
        # naive example; replace with regex or NLP later
        text = data['text']
        data['vendor'] = find_vendor(text)
        data['amount'] = find_amount(text)
        return data

class Sink(Step):
    def run(self, data):
        save_to_excel_sheet(data)
        return data

class Pipeline:
    def __init__(self, steps):
        self.steps = steps
    def execute(self, initial):
        data = initial
        for step in self.steps:
            data = step.run(data)
        return data


此模式可擴展:添加ClassifierStep語言檢測、TranslatorStep非英語文檔等。

5. 信息豐富與提取——先用正則表達式,再用機器學習

從確定性解析(正則表達式)開始。如果發票內容混亂或包含多種布局,請添加機器學習模型(或使用layout-parser)。正則表達式代碼片段示例:

import re

AMOUNT_RE = re.compile(r"(?<!\d)(?:USD|EUR|\$)?\s?([\d{1,3}(?:,\d{3})*(?:\.\d{2})?)\b")

def find_amount(text: str) -> float | None:
    m = AMOUNT_RE.search(text.replace("\n", " "))
    if m:
        s = m.group(1).replace(',', '')
        return float(s)
    return None

為了提高可靠性,請使用spacy+ 自定義 NER 或layout-parser在空間上檢測發票字段。

6. Web 自動化和抓取——Playwright 用于下載和儀表盤

當發票位于網絡儀表板后面時,使用 Playwright 自動下載。

pip install playwright
playwright install
def login_and_download(url, user, password, download_path):
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        page = browser.new_page()
        page.goto(url)
        page.fill('#username', user)
        page.fill('#password', password)
        page.click('#login')
        page.wait_for_selector('a.download')
        with page.expect_download() as download_info:
            page.click('a.download')
        download = download_info.value
        download.save_as(download_path)
        browser.close()

這使得服務可以自動收集源 PDF——如果小姐姐想運行系統每天早上獲取客戶文檔的訂閱,這一點至關重要。

7. 打包工具 — CLI 使用Typer/Click

對于分發,將功能包裝為 CLI,以便非開發客戶可以在本地運行它,或者可以在服務器上運行它。

pip install typer
import typer
from pipeline import Pipeline, Loader, Parser, Sink

app = typer.Typer()

@app.command()
def process(path: str):
    steps = [Loader(path), Parser(), Sink()]
    p = Pipeline(steps)
    p.execute({})
    typer.echo("Processed!")

if __name__ == "__main__":
    app()

構建一個setup.py/pyproject.toml并發布到 PyPI,或者打包為 wheel / Docker 鏡像。

8. 使用 worker 進行擴展:Celery + Redis(或 FastAPI + 后臺任務)

如果你想讓更多的小姐姐一起同時使用時,那么在工作隊列中運行處理工作,而不是阻止所有內容。

pip install celery redis
#tasks.py
from celery import Celery
from pipeline import Pipeline, Loader, Parser, Sink

app = Celery('tasks', broker='redis://localhost:6379/0')

@app.task
def process_file(path):
    steps = [Loader(path), Parser(), Sink()]
    Pipeline(steps).execute({})

Web 前端/API 入隊process_file.delay(path)并立即返回。工作線程負責處理并將結果推送至存儲。

9. 可觀察性和可靠性——日志、指標、可重試步驟

使用loguru+結構化日志,并導出正常運行時間、隊列長度和故障率的指標(Prometheus)。

pip install loguru
from loguru import logger
logger.add("service.log", rotation="10 MB", level="INFO")

try:
    process_file("/tmp/a.pdf")
except Exception as e:
    logger.exception("Processing failed")

工具做完了,讓財務小姐姐試用時,結果她投來了崇拜的眼神......

責任編輯:武曉燕 來源: 數據STUDIO
相關推薦

2019-09-23 10:04:26

抖音識別器Github

2021-04-14 14:28:14

Python點攢抖音

2024-05-13 16:29:56

Python自動化

2019-10-21 10:01:58

Python素描技術

2020-04-07 12:13:15

Python數據爬蟲

2020-08-24 14:16:59

數據Python存儲

2014-03-11 11:10:10

PowerShell自動化腳本

2011-08-25 09:33:25

MySQL運維

2024-11-13 13:14:38

2024-11-11 16:55:54

2024-06-21 10:46:44

2024-08-16 21:51:42

2022-02-17 13:03:28

Python腳本代碼

2025-02-07 12:58:33

python自動化腳本

2022-08-05 09:06:07

Python腳本代碼

2024-10-28 19:36:05

2023-07-07 08:24:53

Python爬蟲Flask

2022-02-09 10:04:35

財務自動化深度學習機器學習

2017-12-17 21:58:18

2011-05-31 17:35:45

測試自動化QTP
點贊
收藏

51CTO技術棧公眾號

欧美福利在线| 国产精品一区专区| 国产mv久久久| 国产成人一二| 日本不卡高字幕在线2019| 99热国内精品| 国产视频精品网| 久久精品国产精品亚洲综合| 欧美不卡在线播放| 自拍视频在线观看一区二区| 毛片免费在线| 日韩精品免费在线观看| 亚洲精品一区国产| 亚洲精品欧美日韩| 日韩和的一区二区| 国产成人综合一区| 精品人伦一区二区三区蜜桃免费 | 99久久婷婷国产| 婷婷六月天丁香| 日韩亚洲欧美综合| 91九色鹿精品国产综合久久香蕉| 国产精品私人影院| 香港三级经典全部种子下载| 精品视频一区二区不卡| 涩涩视频在线| 欧美在线视频网站| 99精品国产99久久久久久福利| 国内自拍中文字幕| 亚洲情趣在线观看| 国产黄色小视频在线| 久久资源免费视频| 欧美激情91| 99色精品视频| 欧美男人的天堂一二区| 在线免费成人| 国产美女99p| 中文字幕精品一区二区三区精品 | 五月天av在线| 国产精品情侣自拍| 国产高清久久久| 在线播放av更多| 日韩精品在线看| 青草国产精品| 人妻少妇精品久久| 欧美日韩一级片网站| 红杏aⅴ成人免费视频| 一区二区高清视频| 色哟哟国产精品| 亚洲高清999| av动漫免费观看| 欧美特级限制片免费在线观看| 欧美9999| 91国在线高清视频| 欧美一区二区三区视频在线观看| 国产精品一区二区三区av麻| 欧妇女乱妇女乱视频| 欧美日韩成人一区二区| 亚洲aa在线| 777久久久精品一区二区三区| 91精品啪在线观看国产60岁| 成人3d精品动漫精品一二三| 国产精品欧美激情在线观看| 亚洲国产三级网| 99成人在线| 激情综合闲人网| 国产精品国语对白| 在线观看国产视频| 欧美影院久久久| 久久久久成人黄色影片| 欧美日韩免费看片| 日韩精品福利视频| 欧美日韩国产片| 91综合久久| 人成福利视频在线观看| 68精品久久久久久欧美| 91看片淫黄大片一级在线观看| 欧美粗大gay| 久久av秘一区二区三区| 91精品久久久久久久久99蜜臂| 色999国产精品| 1069男同网址| 欧美激情国产精品| 久久久亚洲精品石原莉奈 | 日韩中文字幕第一页| 九色综合国产一区二区三区| 制服丝袜在线播放| 欧美一区二区综合| 欧美精品99久久久**| 欧美日韩福利| 青青草在线视频免费观看| 成人女保姆的销魂服务| 一区二区在线免费观看| 久久综合亚洲| 日日躁夜夜躁人人揉av五月天| 45www国产精品网站| 国产精品久久久久桃色tv| 99久久香蕉| 国产经典av| 国产精品美女在线观看| 亚洲成人午夜影院| 国产精品久久久久一区二区三区厕所| 国产在线传媒| 亚洲自拍偷拍区| 欧美三级电影一区| 美女尤物久久精品| xxx性欧美| 日韩精品一区二区三区四| 色噜噜久久综合伊人一本| 久久色中文字幕| 秋霞影视一区二区三区| 一级网站免费观看| 91中文精品字幕在线视频| 欧美日韩综合在线| 免费精品视频在线| 欧美成人app| 奇米影视四色在线| 国产在线观看精品一区二区三区| 一道本成人在线| 色一区在线观看| www亚洲天堂| 亚洲2020天天堂在线观看| 久久久蜜桃精品| 超碰成人在线观看| 超清福利视频| 91精品视频免费观看| 在线看一区二区| 蜜桃av一区| 性感女国产在线| heyzo国产| 777777777亚洲妇女| 精品久久久久久国产91| 亚洲精品美女91| www.com.cn成人| 欧美 日韩 国产 激情| 国产精品久久久久久久久久小说| 色天使色偷偷av一区二区| 美女视频一区在线观看| 亚洲一区二区三区四区电影 | 免费看日b视频| 97在线精品国自产拍中文| 在线观看区一区二| 国产精品一区二区在线观看不卡| 国产91精品入| 精品视频一二区| 男人的天堂视频在线| 91精品国产91久久久久久不卡| 色婷婷综合久久久久中文一区二区| 蜜桃视频一区二区| 加勒比久久高清| 婷婷免费在线视频| 黄色片视频在线免费观看| 亚洲自拍偷拍网址| 色偷偷综合社区| 欧美综合视频在线观看| 99re这里都是精品| 黄色另类av| 91蜜桃臀久久一区二区| 黄色小网站在线观看| 黑森林精品导航| 精品国产一区二区三| 欧美黑人极品猛少妇色xxxxx| 欧美日韩精品一区二区| 久久久精品免费观看| 久久av最新网址| 天堂99x99es久久精品免费| 123区在线| 免费福利在线视频| 亚洲爆乳无码专区| 日本不卡久久| 国产日韩在线亚洲字幕中文| 在线日韩日本国产亚洲| 欧美日本国产一区| 亚洲美女在线一区| 不卡视频免费播放| 日韩精品一级中文字幕精品视频免费观看 | 国产一区日韩一区| 偷拍自拍在线看| 午夜男人视频在线观看| 免费不卡av在线| 精品蜜桃一区二区三区| 91成人福利在线| 曰本色欧美视频在线| 欧美日韩在线三区| 亚洲一区二区黄色| 国产片一区二区三区| 激情图片小说一区| 亚洲三级电影在线观看| 国产成人精品一区二区免费看京 | 丁香婷婷在线观看| 成人拍拍拍免费视频网站| 中文字幕の友人北条麻妃| 国产亚洲二区| 日本高清久久天堂| 欧美巨乳美女视频| 亚洲精品资源在线| 日韩精品专区在线影院重磅| 色综合天天视频在线观看| 一区二区三区中文字幕电影 | 久久久久久久亚洲精品| 在线观看久久av|