摘要:txt
print(name, age, is_ok, arr, obj)
if age > 18: print("成年") elif age == 18: print("刚成年") else: print("未成年")
for item in [1, 2, 3]: print("item:", item)
for i in range(10): print("i:", i)
def add(a,py arr = [1, 2, 3] arr.append(4) last = arr."id", "name"]) for i in range(1, 11): ws.append([i, random_cn_name()])
out_
适合人群:
git地址在这里:https://gitee.com/mslimyjj/old-ling-python/tree/master/python-cheatsheet-demos
https://gitee.com/mslimyjj/old-ling-python/tree/master/python-cheatsheet-demos
建议在 python-cheatsheet-demos/ 目录中运行命令(相对路径/生成文件最直观)。
python-cheatsheet-demos/
python 01_basics.py
如果你的环境里 python 命令不可用,可以使用 Python 官方“嵌入式版本”(无需安装、不污染系统环境)。
python
在 python-cheatsheet-demos/ 目录执行:
$ver='3.11.8' $zip="python-$ver-embed-amd64.zip" $url="https://www.python.org/ftp/python/$ver/$zip" $dest="..\.python-embed" New-Item -ItemType Directory -Force -Path $dest | Out-Null Invoke-WebRequest -Uri $url -OutFile "$dest\$zip" Expand-Archive -Force -Path "$dest\$zip" -DestinationPath $dest & "$dest\python.exe" 01_basics.py
后续统一用它运行 demo:
& "..\.python-embed\python.exe" 05_requests_demo.py
如果你用系统 Python:
pip install -r requirements.txt
如果你用嵌入式 Python:
& "..\.python-embed\python.exe" -m pip install -r requirements.txt
文件:01_basics.py
01_basics.py
name = "张三" # str age = 20 # int is_ok = True # bool arr = [1, 2, 3] # list = JS Array obj = {"a": 1} # dict = JS Object print(name, age, is_ok, arr, obj) if age > 18: print("成年") elif age == 18: print("刚成年") else: print("未成年") for item in [1, 2, 3]: print("item:", item) for i in range(10): print("i:", i) def add(a, b): return a + b res = add(1, 2) print("add:", res)
运行:
& "..\.python-embed\python.exe" 01_basics.py
文件:02_list_dict.py
02_list_dict.py
arr = [1, 2, 3] arr.append(4) last = arr.pop() print(arr, "popped:", last) print("len:", len(arr)) print("first:", arr[0]) user = { "name": "tom", "age": 20, } print("name1:", user["name"]) print("name2:", user.get("name")) print("missing:", user.get("addr")) user["addr"] = "北京" print(user)
你可以把 list 当成 JS 的数组,把 dict 当成 JS 的对象。
list
dict
& "..\.python-embed\python.exe" 02_list_dict.py
文件:03_json_demo.py
03_json_demo.py
import json data = json.loads('{"name":"tom","age":20}') print(data, type(data)) str_data = json.dumps(data, ensure_ascii=False) print(str_data, type(str_data))
json.loads
json.dumps
& "..\.python-embed\python.exe" 03_json_demo.py
文件:04_file_io.py
04_file_io.py
import json with open("test.txt", "w", encoding="utf-8") as f: f.write("hello\n") with open("test.txt", "r", encoding="utf-8") as f: content = f.read() print("content:", content) payload = {"name": "tom", "age": 20} with open("data.json", "w", encoding="utf-8") as f: json.dump(payload, f, ensure_ascii=False, indent=2) with open("data.json", "r", encoding="utf-8") as f: data = json.load(f) print("json:", data)
& "..\.python-embed\python.exe" 04_file_io.py
输出会读写当前目录的:
test.txt
data.json
文件:05_requests_demo.py
05_requests_demo.py
import requests res = requests.get("https://httpbin.org/get", params={"q": "test"}, timeout=10) print("get status:", res.status_code) print(res.json()["args"]) res = requests.post("https://httpbin.org/post", json={"username": "admin"}, timeout=10) print("post status:", res.status_code) print(res.json()["json"])
这个 demo 用 https://httpbin.org 作为测试服务,演示 GET/POST JSON。
https://httpbin.org
文件:06_fastapi_main.py
06_fastapi_main.py
from fastapi import FastAPI app = FastAPI() @app.get("/api/user") def get_user(): return {"name": "tom", "age": 20}
安装依赖(如果还没装):
pip install fastapi uvicorn
uvicorn 06_fastapi_main:app --reload
访问:
http://localhost:8000/api/user
http://localhost:8000/docs
文件:07_scripts_os.py
07_scripts_os.py
import os for file in os.listdir("./"): print(file) imgs_dir = "./imgs" if os.path.isdir(imgs_dir): for i, file in enumerate(os.listdir(imgs_dir)): src = os.path.join(imgs_dir, file) dst = os.path.join(imgs_dir, f"img{i}.png") if os.path.isfile(src): os.rename(src, dst) print("renamed:", src, "->", dst)
& "..\.python-embed\python.exe" 07_scripts_os.py
注意:批量重命名会操作 ./imgs 目录下文件名,运行前确认目录存在并且文件可改名。
./imgs
文件:08_ai_call.py
08_ai_call.py
import requests def call_ai(prompt: str): res = requests.post( "http://localhost:8000/ai", json={"prompt": prompt}, timeout=30, ) res.raise_for_status() return res.json() code = call_ai("生成一个Vue3按钮组件") print(code)
这个 demo 会调用:POST http://localhost:8000/ai
POST http://localhost:8000/ai
如果你本地没有启动这个服务,会出现连接被拒绝(这属于正常现象)。
& "..\.python-embed\python.exe" 08_ai_call.py
文件:09_capture_requests.py
09_capture_requests.py
import argparse import re import sys from urllib.parse import urlparse def _normalize_url(u: str) -> str: try: p = urlparse(u) if not p.scheme or not p.netloc: return u return p._replace(fragment="").geturl() except Exception: return u def _looks_like_api(u: str) -> bool: low = u.lower() if any(x in low for x in ("/api", "/graphql", "/v1/", "/v2/", "/rpc")): return True if any(low.endswith(x) for x in (".json", ".xml")): return True return False def _capture_with_playwright(url: str, timeout_ms: int, only_api: bool) -> list[str]: try: from playwright.sync_api import sync_playwright # type: ignore except Exception as e: raise RuntimeError("missing_playwright") from e seen: set[str] = set() out: list[str] = [] def on_request(req): u = _normalize_url(req.url) if only_api and (not _looks_like_api(u)): return if u not in seen: seen.add(u) out.append(u) with sync_playwright() as p: browser = p.chromium.launch(headless=True) context = browser.new_context() page = context.new_page() page.on("request", on_request) page.goto(url, wait_until="networkidle", timeout=timeout_ms) try: page.wait_for_timeout(1500) except Exception: pass context.close() browser.close() return out def _extract_from_html(url: str, timeout_sec: int, only_api: bool) -> list[str]: import requests html = requests.get(url, timeout=timeout_sec).text candidates = set(re.findall(r"https?://[^\s\"'>]+", html)) cleaned = [_normalize_url(u) for u in candidates] if only_api: cleaned = [u for u in cleaned if _looks_like_api(u)] cleaned.sort() return cleaned def main(argv: list[str]) -> int: parser = argparse.ArgumentParser() parser.add_argument("url") parser.add_argument("--out", default="send.txt") parser.add_argument("--timeout", type=int, default=30) parser.add_argument("--only-api", action="store_true") parser.add_argument("--mode", choices=["auto", "playwright", "html"], default="auto") args = parser.parse_args(argv) url = args.url out_path = args.out timeout_sec = args.timeout only_api = bool(args.only_api) mode = args.mode urls: list[str] = [] if mode in ("auto", "playwright"): try: urls = _capture_with_playwright(url, timeout_sec * 1000, only_api) except RuntimeError as e: if str(e) != "missing_playwright" or mode == "playwright": raise urls = [] if (not urls) and mode in ("auto", "html"): urls = _extract_from_html(url, timeout_sec, only_api) with open(out_path, "w", encoding="utf-8") as f: for u in urls: f.write(u + "\n") print(f"saved {len(urls)} urls -> {out_path}") return 0 if __name__ == "__main__": raise SystemExit(main(sys.argv[1:]))
目标:给一个网页 URL,把它“页面里出现的 URL / 或页面运行时发出的请求”抓出来,写到 send.txt。
send.txt
安装:
pip install playwright python -m playwright install chromium
运行(只保留更像接口的 URL):
python 09_capture_requests.py https://example.com --only-api --out send.txt
如果你不安装 Playwright,脚本会自动降级为“从 HTML 源码中提取 URL”。
你也可以强制:
python 09_capture_requests.py https://example.com --mode html --out send.txt
参数速记:
--mode playwright
--mode html
--only-api
/api
/graphql
/v1/
/v2/
.json
文件:10_sleep_print.py
10_sleep_print.py
import time from pynput.keyboard import Controller time.sleep(3) Controller().type("Helloween")
这个 demo 用 pynput 控制键盘:
pynput
Helloween
使用方法:先把光标点到你想输入的位置(例如记事本/浏览器输入框),再运行脚本。
& "..\.python-embed\python.exe" 10_sleep_print.py
文件:11_generate_user_excel.py
11_generate_user_excel.py
import os import random from openpyxl import Workbook def random_cn_name() -> str: surnames = list("赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫经房裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊于惠甄曲家封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘景詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲邰从鄂索咸籍赖卓蔺屠蒙池乔阴郁胥能苍双闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍却璩桑桂濮牛寿通边扈燕冀郏浦尚农温别庄晏柴瞿阎充慕连茹习宦艾鱼容向古易慎戈廖庾终暨居衡步都耿满弘匡国文寇广禄阙东欧殳沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚那简饶空曾毋沙乜养鞠须丰巢关蒯相查后荆红游竺权逯盖益桓公万俟司马上官欧阳夏侯诸葛闻人东方赫连皇甫尉迟公羊澹台公冶宗政濮阳淳于单于太叔申屠公孙仲孙轩辕令狐钟离宇文长孙慕容司徒司空") given_chars = list("一乙二十丁厂七卜人入八九几儿了力乃刀又三于干亏士工土才下寸大丈与万上小口山巾千乞川亿个夕久么勺丸凡及广亡门义之尸弓己已子卫也女飞刃习叉马乡丰王井开夫天元无云专扎艺木五支厅不太犬区历尤友匹车巨牙屯比互切瓦止少日中贝内水冈见手午牛毛气升长仁什片仆化仇币仍仅斤爪反介父从今凶分乏公仓月氏勿欠风丹匀乌凤勾文六方火为斗忆计订户认心尺引丑巴孔队办以允予劝双书幻玉刊末未示击打巧正扑扒功扔去甘世古节本术可丙左厉右石布龙平灭轧东卡北占业旧帅归且旦目叶甲申叮电号田由史只央兄叼叫另叨叹四生失禾丘付仗代仙们仪白仔他斥瓜乎丛令用甩印乐句匆册犯外处冬鸟务包饥主市立闪兰半汁汇头汉宁它讨写让礼训必议讯记永司尼民出辽奶奴召加皮边发孕圣对台矛纠母幼丝式刑动扛寺吉扣考托老执巩圾扩扫地扬场耳共芒亚芝朽朴机权过臣再协西压厌在有百存而页匠夸夺灰达列死成夹轨邪划迈毕至此贞师尘尖劣光当早吐吓虫曲团同吊吃因吸吗屿帆岁回岂则刚网肉年朱先丢舌竹迁乔伟传乒乓休伍伏优伐延件任伤价伦份华仰仿伙伪自伊血向似后行舟全会杀合兆企众爷伞创肌朵杂危旬旨负各名多争色壮冲妆冰庄庆亦刘齐交次衣产决充妄闭问闯羊并关米灯州汗污江池汤忙兴宇守宅字安讲军许论农讽设访那迅尽导异孙阵阳收阶阴防如妇好她妈戏羽观欢买红驮纤级约纪驰巡") surname = random.choice(surnames) given_len = random.choice([1, 2]) given = "".join(random.choice(given_chars) for _ in range(given_len)) return surname + given def main(): wb = Workbook() ws = wb.active ws.title = "user" ws.append(["id", "name"]) for i in range(1, 11): ws.append([i, random_cn_name()]) out_path = os.path.join(os.path.dirname(__file__), "user.xlsx") wb.save(out_path) print("saved ->", out_path) if __name__ == "__main__": main()
这个 demo 用 openpyxl 生成 Excel:
openpyxl
user.xlsx
user
id
name
& "..\.python-embed\python.exe" 11_generate_user_excel.py
with open(...)
requests.get(...)
本次需消耗银元:
100
当前账户余额: 0 银元
print(name, age, is_ok, arr, obj)
if age > 18: print("成年") elif age == 18: print("刚成年") else: print("未成年")
for item in [1, 2, 3]: print("item:", item)
for i in range(10): print("i:", i)
def add(a,py arr = [1, 2, 3] arr.append(4) last = arr."id", "name"]) for i in range(1, 11): ws.append([i, random_cn_name()])
Python 速记手册(含可运行 Demo 01~11)
适合人群:
git地址在这里:
https://gitee.com/mslimyjj/old-ling-python/tree/master/python-cheatsheet-demos0. 快速开始(先跑起来)
建议在
python-cheatsheet-demos/目录中运行命令(相对路径/生成文件最直观)。Windows:没有 python 命令怎么办
如果你的环境里
python命令不可用,可以使用 Python 官方“嵌入式版本”(无需安装、不污染系统环境)。在
python-cheatsheet-demos/目录执行:后续统一用它运行 demo:
一键安装依赖
如果你用系统 Python:
如果你用嵌入式 Python:
1. Demo 01:基础语法(变量 / 条件 / 循环 / 函数)
文件:
01_basics.pyname = "张三" # str age = 20 # int is_ok = True # bool arr = [1, 2, 3] # list = JS Array obj = {"a": 1} # dict = JS Object print(name, age, is_ok, arr, obj) if age > 18: print("成年") elif age == 18: print("刚成年") else: print("未成年") for item in [1, 2, 3]: print("item:", item) for i in range(10): print("i:", i) def add(a, b): return a + b res = add(1, 2) print("add:", res)运行:
2. Demo 02:list / dict(前端最熟)
文件:
02_list_dict.pyarr = [1, 2, 3] arr.append(4) last = arr.pop() print(arr, "popped:", last) print("len:", len(arr)) print("first:", arr[0]) user = { "name": "tom", "age": 20, } print("name1:", user["name"]) print("name2:", user.get("name")) print("missing:", user.get("addr")) user["addr"] = "北京" print(user)你可以把
list当成 JS 的数组,把dict当成 JS 的对象。运行:
3. Demo 03:JSON(前后端交互必备)
文件:
03_json_demo.pyimport json data = json.loads('{"name":"tom","age":20}') print(data, type(data)) str_data = json.dumps(data, ensure_ascii=False) print(str_data, type(str_data))json.loads:字符串 -> 对象json.dumps:对象 -> 字符串运行:
4. Demo 04:文件读写(批量处理神器)
文件:
04_file_io.pyimport json with open("test.txt", "w", encoding="utf-8") as f: f.write("hello\n") with open("test.txt", "r", encoding="utf-8") as f: content = f.read() print("content:", content) payload = {"name": "tom", "age": 20} with open("data.json", "w", encoding="utf-8") as f: json.dump(payload, f, ensure_ascii=False, indent=2) with open("data.json", "r", encoding="utf-8") as f: data = json.load(f) print("json:", data)运行:
输出会读写当前目录的:
test.txtdata.json5. Demo 05:requests(抓接口 / mock)
文件:
05_requests_demo.pyimport requests res = requests.get("https://httpbin.org/get", params={"q": "test"}, timeout=10) print("get status:", res.status_code) print(res.json()["args"]) res = requests.post("https://httpbin.org/post", json={"username": "admin"}, timeout=10) print("post status:", res.status_code) print(res.json()["json"])这个 demo 用
https://httpbin.org作为测试服务,演示 GET/POST JSON。运行:
6. Demo 06:FastAPI(快速写接口)
文件:
06_fastapi_main.pyfrom fastapi import FastAPI app = FastAPI() @app.get("/api/user") def get_user(): return {"name": "tom", "age": 20}安装依赖(如果还没装):
运行:
访问:
http://localhost:8000/api/userhttp://localhost:8000/docs7. Demo 07:小脚本(遍历目录 / 批量重命名)
文件:
07_scripts_os.pyimport os for file in os.listdir("./"): print(file) imgs_dir = "./imgs" if os.path.isdir(imgs_dir): for i, file in enumerate(os.listdir(imgs_dir)): src = os.path.join(imgs_dir, file) dst = os.path.join(imgs_dir, f"img{i}.png") if os.path.isfile(src): os.rename(src, dst) print("renamed:", src, "->", dst)运行:
注意:批量重命名会操作
./imgs目录下文件名,运行前确认目录存在并且文件可改名。8. Demo 08:对接 AI(HTTP 调用套路)
文件:
08_ai_call.pyimport requests def call_ai(prompt: str): res = requests.post( "http://localhost:8000/ai", json={"prompt": prompt}, timeout=30, ) res.raise_for_status() return res.json() code = call_ai("生成一个Vue3按钮组件") print(code)这个 demo 会调用:
POST http://localhost:8000/ai如果你本地没有启动这个服务,会出现连接被拒绝(这属于正常现象)。
运行:
9. Demo 09:抓取网页请求并保存到 send.txt
文件:
09_capture_requests.pyimport argparse import re import sys from urllib.parse import urlparse def _normalize_url(u: str) -> str: try: p = urlparse(u) if not p.scheme or not p.netloc: return u return p._replace(fragment="").geturl() except Exception: return u def _looks_like_api(u: str) -> bool: low = u.lower() if any(x in low for x in ("/api", "/graphql", "/v1/", "/v2/", "/rpc")): return True if any(low.endswith(x) for x in (".json", ".xml")): return True return False def _capture_with_playwright(url: str, timeout_ms: int, only_api: bool) -> list[str]: try: from playwright.sync_api import sync_playwright # type: ignore except Exception as e: raise RuntimeError("missing_playwright") from e seen: set[str] = set() out: list[str] = [] def on_request(req): u = _normalize_url(req.url) if only_api and (not _looks_like_api(u)): return if u not in seen: seen.add(u) out.append(u) with sync_playwright() as p: browser = p.chromium.launch(headless=True) context = browser.new_context() page = context.new_page() page.on("request", on_request) page.goto(url, wait_until="networkidle", timeout=timeout_ms) try: page.wait_for_timeout(1500) except Exception: pass context.close() browser.close() return out def _extract_from_html(url: str, timeout_sec: int, only_api: bool) -> list[str]: import requests html = requests.get(url, timeout=timeout_sec).text candidates = set(re.findall(r"https?://[^\s\"'>]+", html)) cleaned = [_normalize_url(u) for u in candidates] if only_api: cleaned = [u for u in cleaned if _looks_like_api(u)] cleaned.sort() return cleaned def main(argv: list[str]) -> int: parser = argparse.ArgumentParser() parser.add_argument("url") parser.add_argument("--out", default="send.txt") parser.add_argument("--timeout", type=int, default=30) parser.add_argument("--only-api", action="store_true") parser.add_argument("--mode", choices=["auto", "playwright", "html"], default="auto") args = parser.parse_args(argv) url = args.url out_path = args.out timeout_sec = args.timeout only_api = bool(args.only_api) mode = args.mode urls: list[str] = [] if mode in ("auto", "playwright"): try: urls = _capture_with_playwright(url, timeout_sec * 1000, only_api) except RuntimeError as e: if str(e) != "missing_playwright" or mode == "playwright": raise urls = [] if (not urls) and mode in ("auto", "html"): urls = _extract_from_html(url, timeout_sec, only_api) with open(out_path, "w", encoding="utf-8") as f: for u in urls: f.write(u + "\n") print(f"saved {len(urls)} urls -> {out_path}") return 0 if __name__ == "__main__": raise SystemExit(main(sys.argv[1:]))目标:给一个网页 URL,把它“页面里出现的 URL / 或页面运行时发出的请求”抓出来,写到
send.txt。9.1 推荐模式:Playwright(最接近浏览器真实请求)
安装:
运行(只保留更像接口的 URL):
9.2 兜底模式:HTML 提取(抓不到 XHR/fetch)
如果你不安装 Playwright,脚本会自动降级为“从 HTML 源码中提取 URL”。
你也可以强制:
参数速记:
--mode playwright:强制用浏览器抓--mode html:只解析 HTML--only-api:只保留更像接口的 URL(包含/api、/graphql、/v1/、/v2/、.json等)10. Demo 10:3 秒后“键盘输入” Helloween(不是 print)
文件:
10_sleep_print.pyimport time from pynput.keyboard import Controller time.sleep(3) Controller().type("Helloween")这个 demo 用
pynput控制键盘:Helloween使用方法:先把光标点到你想输入的位置(例如记事本/浏览器输入框),再运行脚本。
运行:
11. Demo 11:生成 user.xlsx(随机 10 个姓名)
文件:
11_generate_user_excel.pyimport os import random from openpyxl import Workbook def random_cn_name() -> str: surnames = list("赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫经房裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊于惠甄曲家封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘景詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲邰从鄂索咸籍赖卓蔺屠蒙池乔阴郁胥能苍双闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍却璩桑桂濮牛寿通边扈燕冀郏浦尚农温别庄晏柴瞿阎充慕连茹习宦艾鱼容向古易慎戈廖庾终暨居衡步都耿满弘匡国文寇广禄阙东欧殳沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚那简饶空曾毋沙乜养鞠须丰巢关蒯相查后荆红游竺权逯盖益桓公万俟司马上官欧阳夏侯诸葛闻人东方赫连皇甫尉迟公羊澹台公冶宗政濮阳淳于单于太叔申屠公孙仲孙轩辕令狐钟离宇文长孙慕容司徒司空") given_chars = list("一乙二十丁厂七卜人入八九几儿了力乃刀又三于干亏士工土才下寸大丈与万上小口山巾千乞川亿个夕久么勺丸凡及广亡门义之尸弓己已子卫也女飞刃习叉马乡丰王井开夫天元无云专扎艺木五支厅不太犬区历尤友匹车巨牙屯比互切瓦止少日中贝内水冈见手午牛毛气升长仁什片仆化仇币仍仅斤爪反介父从今凶分乏公仓月氏勿欠风丹匀乌凤勾文六方火为斗忆计订户认心尺引丑巴孔队办以允予劝双书幻玉刊末未示击打巧正扑扒功扔去甘世古节本术可丙左厉右石布龙平灭轧东卡北占业旧帅归且旦目叶甲申叮电号田由史只央兄叼叫另叨叹四生失禾丘付仗代仙们仪白仔他斥瓜乎丛令用甩印乐句匆册犯外处冬鸟务包饥主市立闪兰半汁汇头汉宁它讨写让礼训必议讯记永司尼民出辽奶奴召加皮边发孕圣对台矛纠母幼丝式刑动扛寺吉扣考托老执巩圾扩扫地扬场耳共芒亚芝朽朴机权过臣再协西压厌在有百存而页匠夸夺灰达列死成夹轨邪划迈毕至此贞师尘尖劣光当早吐吓虫曲团同吊吃因吸吗屿帆岁回岂则刚网肉年朱先丢舌竹迁乔伟传乒乓休伍伏优伐延件任伤价伦份华仰仿伙伪自伊血向似后行舟全会杀合兆企众爷伞创肌朵杂危旬旨负各名多争色壮冲妆冰庄庆亦刘齐交次衣产决充妄闭问闯羊并关米灯州汗污江池汤忙兴宇守宅字安讲军许论农讽设访那迅尽导异孙阵阳收阶阴防如妇好她妈戏羽观欢买红驮纤级约纪驰巡") surname = random.choice(surnames) given_len = random.choice([1, 2]) given = "".join(random.choice(given_chars) for _ in range(given_len)) return surname + given def main(): wb = Workbook() ws = wb.active ws.title = "user" ws.append(["id", "name"]) for i in range(1, 11): ws.append([i, random_cn_name()]) out_path = os.path.join(os.path.dirname(__file__), "user.xlsx") wb.save(out_path) print("saved ->", out_path) if __name__ == "__main__": main()这个 demo 用
openpyxl生成 Excel:user.xlsxuserid、name运行:
12. 你可以怎么用这套 demo
with open(...)/requests.get(...)直接回来抄