
Python 常用模块别从头造轮子这些内置的和第三方的直接拿来用Python 最值钱的东西就是它的生态——标准库加上 PyPI 上几十万的第三方包几乎覆盖了你可能遇到的所有需求。写代码的时候遇到问题第一反应不应该是自己怎么实现而是有没有现成的模块可以用。文件和路径os、sys、pathlibos跟操作系统打交道importos# 路径拼接跨平台pathos.path.join(data,logs,app.log)# data/logs/app.log# 获取当前目录os.getcwd()# 创建目录存在也不报错os.makedirs(data/logs,exist_okTrue)# 判断文件/目录是否存在os.path.exists(data.txt)os.path.isfile(data.txt)os.path.isdir(data)# 列出目录内容os.listdir(.)# 删除文件os.remove(temp.txt)# 环境变量os.environ.get(PATH)sys控制 Python 解释器importsys# 命令行参数# python script.py --name Alicesys.argv# [script.py, --name, Alice]# 程序退出sys.exit(1)# 非0表示异常# Python 版本检查ifsys.version_info(3,8):print(需要 Python 3.8)sys.exit(1)# 模块搜索路径sys.path sys.path.append(/my/custom/path)# 平台信息sys.platform# linux, win32, darwinpathlib面向对象的路径操作推荐frompathlibimportPath# 创建路径pPath(/home/user/data/file.txt)homePath.home()currentPath.cwd()# 路径属性p.name# file.txtp.stem# filep.suffix# .txtp.parent# /home/user/data# 拼接用 / 运算符pathPath(data)/logs/app.log# 读写文件一行搞定Path(data.txt).write_text(Hello,encodingutf-8)contentPath(data.txt).read_text(encodingutf-8)# 遍历文件forfileinPath(.).glob(*.py):print(file)# 递归遍历forfileinPath(.).rglob(*.txt):print(file)# 创建目录Path(data/logs).mkdir(parentsTrue,exist_okTrue)# 判断存在ifPath(data.txt).exists():Path(data.txt).unlink()# 删除os还是pathlibpathlib是新代码的推荐选择更直观、跨平台更好。老代码里os.path也很常见两种都认识就行。日期时间datetimefromdatetimeimportdatetime,date,timedelta# 获取当前时间nowdatetime.now()todaydate.today()# 格式化输出now.strftime(%Y-%m-%d %H:%M:%S)# 2026-07-02 10:30:00now.strftime(%Y年%m月%d日)# 2026年07月02日# 字符串转 datetimedtdatetime.strptime(2026-07-02 10:30:00,%Y-%m-%d %H:%M:%S)# 时间计算tomorrownowtimedelta(days1)next_weeknowtimedelta(weeks1)yesterdaynow-timedelta(days1)# 时间差deltadatetime(2026,12,31)-datetime(2026,1,1)delta.days# 364# 时间戳timestampnow.timestamp()datetime.fromtimestamp(timestamp)日期格式符记住%Y-%m-%d %H:%M:%S就够了其他格式遇到再查。JSON 处理jsonimport json data {name: 张三, age: 25, active: True} # 字典 → JSON 字符串 json_str json.dumps(data, ensure_asciiFalse, indent2) # { # name: 张三, # age: 25, # active: true # } # JSON 字符串 → 字典 parsed json.loads({name: 张三, age: 25}) # 读写文件 with open(data.json, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2) with open(data.json, r, encodingutf-8) as f: data json.load(f)记住两个参数ensure_asciiFalse保留中文indent2让输出可读。正则表达式re常用函数就四个search找一个、findall找所有、sub替换、split分割。importre text联系我13812345678 或 emailtest.com# 找第一个matchre.search(r1[3-9]\d{9},text)ifmatch:print(match.group())# 13812345678# 找所有re.findall(r1[3-9]\d{9},text)# [13812345678]# 找所有 捕获组matchre.search(r(\w)(\w\.\w),text)match.group(1)# emailmatch.group(2)# test.com# 替换re.sub(r1[3-9]\d{9},***,text)# 联系我*** 或 emailtest.com# 预编译多次使用时提升性能patternre.compile(r1[3-9]\d{9})pattern.findall(text)常用正则速查需求正则手机号1[3-9]\d{9}邮箱\w\w\.\wURLhttps?://[^\s]数字\d中文[\u4e00-\u9fa5]高级数据结构collectionsdefaultdict不存在的键自动给默认值fromcollectionsimportdefaultdict# 默认值是列表dddefaultdict(list)dd[fruits].append(apple)# 不会报 KeyErrordd[fruits]# [apple]# 默认值是数字 0dd_intdefaultdict(int)dd_int[count]1# 1Counter计数神器fromcollectionsimportCounter words[apple,banana,apple,orange,apple,banana]counterCounter(words)# Counter({apple: 3, banana: 2, orange: 1})counter.most_common(2)# [(apple, 3), (banana, 2)]counter[apple]# 3counter[grape]# 0不存在的返回0不报错deque两端操作 O(1)fromcollectionsimportdeque dqdeque([1,2,3])dq.append(4)# 右边加dq.appendleft(0)# 左边加dq.pop()# 右边删dq.popleft()# 左边删# 固定长度满了自动挤掉旧的dqdeque(maxlen3)foriinrange(5):dq.append(i)# deque([2, 3, 4], maxlen3)迭代器工具itertoolsproduct多层循环替代品fromitertoolsimportproduct colors[红,蓝]sizes[S,M,L]# 替代嵌套 forforc,sinproduct(colors,sizes):print(f{c}{s})# 红S, 红M, 红L, 蓝S, 蓝M, 蓝Lpermutations和combinations排列组合fromitertoolsimportpermutations,combinationslist(permutations([1,2,3],2))# 排列有序list(combinations([1,2,3,4],2))# 组合无序不重复chain串联多个列表fromitertoolsimportchainlist(chain([1,2],[3,4],[5,6]))# [1, 2, 3, 4, 5, 6]缓存和偏函数functoolslru_cache函数结果缓存fromfunctoolsimportlru_cachelru_cache(maxsize128)deffib(n):ifn2:returnnreturnfib(n-1)fib(n-2)fib(40)# 第一次慢之后直接从缓存取fib.cache_info()# 查看缓存命中情况partial固定部分参数生成新函数fromfunctoolsimportpartialdefpower(base,exponent):returnbase**exponent squarepartial(power,exponent2)cubepartial(power,exponent3)square(5)# 25cube(5)# 125日志loggingimportlogging# 基础配置logging.basicConfig(levellogging.INFO,format%(asctime)s - %(levelname)s - %(message)s,handlers[logging.FileHandler(app.log),logging.StreamHandler()])loggerlogging.getLogger(__name__)logger.debug(调试)logger.info(信息)logger.warning(警告)logger.error(错误)logger.critical(严重)# 记录异常堆栈try:1/0exceptException:logger.exception(发生异常)HTTP 请求requests第三方importrequests# GET 请求resprequests.get(https://api.github.com)resp.status_code# 200resp.json()# 解析 JSON# GET 带参数resprequests.get(https://api.github.com/search/repositories,params{q:python,page:1})# POST JSONresprequests.post(https://httpbin.org/post,json{username:alice,password:secret})# 错误处理try:resprequests.get(https://api.example.com,timeout5)resp.raise_for_status()# 4xx/5xx 抛异常exceptrequests.exceptions.Timeout:print(超时)exceptrequests.exceptions.ConnectionError:print(连接失败)session 保持登录状态sessionrequests.Session()session.post(https://example.com/login,data{user:alice,pass:123})# 后续请求自动带 cookiesprofilesession.get(https://example.com/profile)数据分析三件套pandas、numpy、matplotlibpandas处理表格数据importpandasaspd# 读 CSV / Exceldfpd.read_csv(data.csv)dfpd.read_excel(data.xlsx)# 看一眼数据df.head()df.info()df.describe()# 筛选df[df[age]25]df[(df[age]25)(df[score]85)]# 分组聚合df.groupby(city)[score].mean()# 写回文件df.to_csv(output.csv,indexFalse)numpy数值计算importnumpyasnp arrnp.array([1,2,3,4,5])arr.mean()# 3.0arr.sum()# 15arr.max()# 5arr[arr2]# 条件筛选 [3, 4, 5]# 创建数组np.zeros((3,4))# 3x4 全0np.ones((2,3))# 2x3 全1np.arange(0,10,2)# [0, 2, 4, 6, 8]np.random.rand(3,3)# 3x3 随机数matplotlib画图importmatplotlib.pyplotaspltimportnumpyasnp xnp.linspace(0,10,100)ynp.sin(x)plt.plot(x,y)plt.xlabel(X)plt.ylabel(Y)plt.title(正弦曲线)plt.show()