9、Python基础之IO编程

发布时间:2026/10/23 5:03:58

9、Python基础之IO编程 前言IO就是Input/Output输入输出。程序和外部数据交换都属于IO操作读取文件、写入文件、网络传输等。IO操作有一个核心特点速度远慢于CPU计算。 Python内置了丰富的IO支持本篇包含文件读写、StringIO/BytesIO、文件目录操作、序列化。文件读写文件读写是最常见的IO。遵循流程打开文件 → 读写内容 → 关闭文件。open()基础用法# 读取文本文件 f open(test.txt, r, encodingutf-8) content f.read() print(content) f.close()r读文本模式w写文本覆盖原有内容a追加写入encodingutf-8指定文件编码一定要显式指定防止乱码read()一次性读取全部内容大文件不要直接read()容易撑爆内存风险如果中间代码抛出异常close()不会执行文件句柄泄漏。推荐使用with上下文管理器自动关闭文件。# with语句推荐退出代码块自动close with open(test.txt, r, encodingutf-8) as f: print(f.read())按行读取、分块读取# readline() 读一行 with open(test.txt, r, encodingutf-8) as f: line f.readline() print(line) # readlines() 读取所有行返回列表 with open(test.txt, r, encodingutf-8) as f: lines f.readlines() # 直接迭代文件对象最省内存 with open(test.txt, r, encodingutf-8) as f: for line in f: print(line.strip())二进制读写图片、视频、音频都是二进制文件用rb / wb# 读取图片 with open(demo.jpg, rb) as f: data f.read()写文件# w模式覆盖原文件 with open(out.txt, w, encodingutf-8) as f: f.write(Hello IO\n) # a模式追加不会覆盖 with open(out.txt, a, encodingutf-8) as f: f.write(追加一行\n)StringIO 和 BytesIO有时候数据不需要落地到磁盘文件只在内存中读写就用这两个工具在内存里模拟文件。StringIO内存读写字符串from io import StringIO # 写入 f StringIO() f.write(hello) f.write( python) print(f.getvalue()) # 获取全部字符串 # 读取 f2 StringIO(你好\nPython) while True: line f2.readline() if not line: break print(line.strip())BytesIO内存读写bytes字节数据用于二进制比如图片字节、网络二进制流from io import BytesIO f BytesIO() f.write(中文.encode(utf-8)) print(f.getvalue()) # 读取 data b\xe4\xb8\xad\xe6\x96\x87 f2 BytesIO(data) print(f2.read())区别StringIO操作strBytesIO操作bytes。操作文件和目录Python内置os模块调用操作系统接口实现目录创建、删除、遍历、路径拼接。注意os模块的函数很多和操作系统强相关Windows和Linux路径格式不一样不要手动拼接字符串使用os.pathimport os # 当前工作目录 print(os.getcwd()) # 列出指定目录下所有文件和子目录 print(os.listdir(.)) # 判断是否是目录 print(os.path.isdir(./test)) # 判断是否是文件 print(os.path.isfile(test.txt)) # 路径拼接跨平台兼容 p os.path.join(., data, test.txt) print(p) # 创建文件夹 # os.mkdir(./demo) # 删除文件夹 # os.rmdir(./demo) # 删除文件 # os.remove(a.txt)遍历目录下所有文件常用import os def scan_dir(path): for name in os.listdir(path): full_path os.path.join(path, name) if os.path.isdir(full_path): scan_dir(full_path) else: print(full_path) # scan_dir(.)补充Python3.4 推荐 pathlib面向对象路径写法但廖雪峰教程主线用os。序列化把内存中的变量dict、list、对象变成可以存储/传输的字节或者字符串叫序列化反向恢复成内存变量叫反序列化。 Python标准库pickle和json。picklePython专用序列化可以序列化绝大多数Python对象但是只能给Python程序读取跨语言不行。import pickle d {name: 小明, age: 18} # 序列化到bytes b pickle.dumps(d) print(b) # 反序列化 res pickle.loads(b) print(res) # 序列化写入文件 with open(dump.pkl, wb) as f: pickle.dump(d, f) # 从文件读取 with open(dump.pkl, rb) as f: d2 pickle.load(f)json通用JSON序列化工程最常用JSON是跨语言通用格式只能序列化基础类型dict、list、str、int、float、bool、None不能直接序列化自定义类实例。import json d {name: 小明, age: 18} # dict - json字符串 s json.dumps(d, ensure_asciiFalse, indent2) print(s) # json字符串 - dict d2 json.loads(s) print(d2) # 写入文件 with open(data.json, w, encodingutf-8) as f: json.dump(d, f, ensure_asciiFalse, indent2) # 读取文件 with open(data.json, r, encodingutf-8) as f: d3 json.load(f)参数说明ensure_asciiFalse中文正常显示不会转\u编码indent2格式化缩进方便阅读如果要序列化自定义类对象需要自己写转换函数把对象转成dict再dumps。小结文件读写优先with open()自动关闭区分文本模式r/w/a和二进制rb/wb指定utf-8编码StringIO / BytesIO内存文件不需要磁盘IO处理临时字符串、二进制流os模块操作系统目录、文件os.path.join跨平台拼接路径序列化picklePython专属json跨语言通用业务首选。
延伸阅读

更多相关文章

2026/10/23 5:03:58

数字员工的6重断裂:当概率型Agent撞上确定性企业流程

【摘要】95%的企业生成式AI试点未产生可测量P&L回报,多步通用办公任务Agent失败率逼近70%。数字员工的困境不在模型智商,而在1个数学底座(误差指数衰减)、2层杠杆约束(集成断层与隐性成本倒挂)、2类止血…

2026/10/23 5:03:58

DRAM四季度合约价再涨两成,想投存储芯片该选哪类基金?

进入10月下旬,存储芯片又出现了新的价格信号。10月21日,集邦咨询预估2026年第四季度DRAM合约价环比上涨约20%——这一涨幅相比第二季度的约80%、第三季度的约40%已明显放缓,但市场整体仍处于供应紧张、需求强劲的高位周期之中。与此同时&…

2026/10/23 6:09:02

RISC-V IDE MRS进阶分享(三):MRS语言服务器

RISC-V IDE MRS进阶分享(三):MRS语言服务器 MounRiver Studio (MRS )的语言服务器是基于clangd的改进版本,可为 C、C等语言开发提供实时的语法分析、智能补全、代码导航、错误诊断、代码重构等功能。下面以沁恒的CH32V317模板工程…

2026/10/23 6:09:02

【kali渗透测试】内网横向渗透横向移动基础

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/23 6:09:02

具身智能系统概论——感知系统

本章系统阐述了具身智能的多模态感知体系。视觉方面,RGB-D相机实现立体感知,事件相机以微秒级响应捕捉动态,占用网络则通过3D空间占据概率统一表征环境,支持遮挡处理与多模态融合。触觉与本体感觉依托力矩传感器、IMU与电子皮肤&a…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑