Python技术迷

这 10 个 Python 付费 app 平替工具,码住!

那个 PDF 改名需求,我第一眼就不太想开 Acrobat。

不是 Acrobat 不行,是你有 200 个文件时,一个个点开、另存、裁剪、压缩,那就不是办公,是受刑。

Python 最适合干这种脏活。

下面这 10 个,我不按“工具介绍”写,按我平时真会不会用来分。

1、Excel 付费插件:pandas + openpyxl

财务丢过来一个表,说“帮我把异常订单筛一下”。

这种活别上来就写循环。

import pandas as pd

df = pd.read_excel("orders.xlsx")
bad = df[(df["pay_status"] == "PAID") & (df["ship_no"].isna())]
bad.to_excel("待补发货单.xlsx", index=False)

pandas 适合算、筛、合并,openpyxl 适合保留 Excel 样式、写单元格。一个管数据,一个管表格文件,这俩别混着乱用。pandas 官方定位就是 Python 的数据分析和处理工具,openpyxl 则是专门读写 xlsx/xlsm 这类 Excel 文件的库。

2、PDF 拆分合并工具:pypdf

有些合同扫描件,动不动几十页,只要其中几页。

from pypdf import PdfReader, PdfWriter

reader = PdfReader("合同.pdf")
writer = PdfWriter()

for i in [0, 2, 3]:
    writer.add_page(reader.pages[i])

with open("给法务的版本.pdf", "wb") as f:
    writer.write(f)

这玩意儿替掉很多“PDF 合并大师”。pypdf 本身就是开源 PDF 库,能拆分、合并、裁剪、转换页面,也能读取文本和元数据。

3、图片批量压缩:Pillow

运营一口气发来 300 张图,说后台传不上去。

我一般不先问他图片哪里来的,先看大小。

from pathlib import Path
from PIL import Image

out = Path("small")
out.mkdir(exist_ok=True)

for img_path in Path("imgs").glob("*.jpg"):
    img = Image.open(img_path)
    img.thumbnail((1600, 1600))
    img.save(out / img_path.name, quality=82, optimize=True)

Pillow 适合裁剪、压缩、转格式、加水印。别小看这个,很多付费图片处理软件,本质就是把这几个动作包了个界面。Pillow 官方说明里也提到它给 Python 提供图像处理能力,并支持不少文件格式。

4、Postman 平替:HTTPX

接口调试不一定非得开 Postman。

尤其是要批量打接口、带 token、顺便校验返回字段时,Python 脚本更顺手。

import httpx

token = "test-token"

with httpx.Client(timeout=5) as client:
    r = client.get(
"https://api.xxx.com/order/detail",
        params={"orderNo": "A20260424001"},
        headers={"Authorization": f"Bearer {token}"}
    )
    data = r.json()

assert data["code"] == 0
assert data["data"]["status"] in ("PAID", "SHIPPED")

HTTPX 支持同步和异步 API,也支持 HTTP/1.1 和 HTTP/2。这个点对接口压测前的小批量验证挺方便。

5、接口自动化平台:pytest

有些团队买测试平台,最后也就用来跑几个接口断言。

我不是说平台没用,但小团队先用 pytest 足够了。

deftest_order_detail(client):
    resp = client.get("/order/detail", params={"orderNo": "A20260424001"})
    body = resp.json()

assert body["code"] == 0
assert body["data"]["orderNo"] == "A20260424001"

真正麻烦的不是写断言,是把测试数据、环境变量、token 刷新这些东西管住。pytest 这块生态够用了,别一开始就上大平台。

6、文件夹监听工具:watchdog

有些付费同步工具,我看了下,其实就是监听目录变化,然后触发动作。

比如供应商每天丢 CSV 到共享目录,文件一来就清洗入库。

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time

classCsvArrived(FileSystemEventHandler):
defon_created(self, event):
if event.src_path.endswith(".csv"):
            print("发现新文件:", event.src_path)
# 这里接清洗、校验、入库逻辑

observer = Observer()
observer.schedule(CsvArrived(), "incoming", recursive=False)
observer.start()

whileTrue:
    time.sleep(1)

watchdog 就是干文件系统事件监听的,适合这种“文件来了就干活”的场景。

7、报表看板工具:Streamlit

老板要个日报页面,不一定非得买 BI。

先用 Streamlit 搭个能看的。

import pandas as pd
import streamlit as st

df = pd.read_excel("日报.xlsx")

st.title("订单日报")
st.metric("订单数", len(df))
st.line_chart(df.groupby("日期")["金额"].sum())

Streamlit 的定位很明确,用 Python 快速做数据应用和交互页面。它不是万能 BI,但临时看板、内部运营页、算法结果展示,很顶用。([Streamlit 文档][6])

8、批量重命名工具:pathlib + re

下载一堆附件,名字乱成这样:

合同扫描件(1).pdf
合同扫描件-最终版.pdf
客户资料_副本.pdf

别手改。

from pathlib import Path
import re

for f in Path("files").iterdir():
ifnot f.is_file():
continue

    name = re.sub(r"[()()_副本最终版\s-]+", "_", f.stem)
    new_name = f"{name.strip('_')}{f.suffix.lower()}"
    f.rename(f.with_name(new_name))

这种脚本没技术含量,但真省命。很多人学 Python,第一个能立刻用上的就是它。

9、日志分析工具:re + Counter

线上排查时,我不太爱先打开很重的日志平台。

本地有一份日志,先粗扫一遍。

import re
from collections import Counter

cnt = Counter()

with open("app.log", encoding="utf-8") as f:
for line in f:
        m = re.search(r"api=([/\w-]+).*cost=(\d+)", line)
ifnot m:
continue
        api, cost = m.group(1), int(m.group(2))
if cost > 1000:
            cnt[api] += 1

print(cnt.most_common(10))

这类脚本适合先判断方向:到底是哪个接口慢,还是所有接口都慢。方向错了,后面看 trace 也容易看偏。

10、桌面小工具:tkinter

有些同事不会命令行,你给他 Python 脚本,他还是用不起来。

那就套个最薄的界面。

import tkinter as tk
from tkinter import filedialog

defpick_file():
    path = filedialog.askopenfilename()
    label.config(text=path or"没选文件")

root = tk.Tk()
root.title("文件校验小工具")

tk.Button(root, text="选择文件", command=pick_file).pack(padx=20, pady=10)
label = tk.Label(root, text="未选择")
label.pack(padx=20, pady=10)

root.mainloop()

tkinter 不漂亮,但它在标准库里。内部工具先能用,再谈好看。

这 10 个工具,别当收藏夹看。

真正的用法是:看到重复操作,先别急着找软件,想一下这个动作是不是能拆成“读文件、改数据、写文件、发请求、出报表”。

能拆出来,Python 基本就能接住。

付费软件当然有价值,尤其是协作、权限、审计、稳定性这些东西。但个人效率和小团队内部工具,别上来就买。很多时候,20 行脚本就够了。