当前位置: 首页 > news >正文

python中的io流

文章目录

      • 读写demo
      • csv和json
      • binary二进制示例
      • 交互窗口(输入和输出)
      • 内存中的 I/O (io.StringIO / io.BytesIO)
      • 高性能 I/O: pathlib 和 异步 (Modern Python)
        • 高性能io-demo1
        • 高性能io-异步文件io
      • 常规建议

又是一大类,记录下。

读写demo

# --- 写入文件 ---content="Hello, Python IO!\n这是第二行内容。\n"# 'w' 模式:写入模式,如果文件存在则覆盖,不存在则创建withopen('example.txt','w',encoding='utf-8')asf:f.write(content)print("文件写入成功。")# --- 读取文件 ---# 'r' 模式:只读模式(默认)withopen('example.txt','r',encoding='utf-8')asf:# 方法 A: 一次性读取所有内容full_content=f.read()print("--- 全部内容 ---")print(full_content)# --- 逐行读取 (适合大文件) ---print("--- 逐行读取 ---")withopen('example.txt','r',encoding='utf-8')asf:forlineinf:# strip() 去除每行末尾的换行符print(f"当前行:{line.strip()}")

csv和json

importcsvimportjson data=[{"name":"Alice","age":25,"city":"Beijing"},{"name":"Bob","age":30,"city":"Shanghai"},{"name":"Charlie","age":28,"city":"Shenzhen"}]# --- JSON I/O ---# 写入 JSONwithopen('data.json','w',encoding='utf-8')asf:json.dump(data,f,ensure_ascii=False,indent=4)# indent 用于格式化输出# 读取 JSONwithopen('data.json','r',encoding='utf-8')asf:loaded_data=json.load(f)print(f"读取到的名字列表:{[item['name']foriteminloaded_data]}")# --- CSV I/O ---# 写入 CSVwithopen('data.csv','w',newline='',encoding='utf-8')asf:writer=csv.DictWriter(f,fieldnames=["name","age","city"])writer.writeheader()# 写入表头writer.writerows(data)# 读取 CSVwithopen('data.csv','r',encoding='utf-8')asf:reader=csv.DictReader(f)forrowinreader:print(f"CSV 行:{row['name']}-{row['city']}")

binary二进制示例

# 假设我们要复制一张图片 (请先确保当前目录下有一张 test.jpg,或者用下面的代码生成一个假的)# 生成一个假的二进制文件用于演示withopen('dummy_image.bin','wb')asf:f.write(b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01')# 伪造的文件头# --- 二进制文件复制 (分块读取,节省内存) ---chunk_size=1024# 每次读取 1KBwithopen('dummy_image.bin','rb')assrc,open('copy_image.bin','wb')asdst:whileTrue:chunk=src.read(chunk_size)ifnotchunk:# 读取完毕breakdst.write(chunk)print("二进制文件复制完成。")

交互窗口(输入和输出)

importsys# --- 基本输入输出 ---user_input=input("请输入你的名字: ")print(f"你好,{user_input}!")# --- 重定向示例 (模拟管道) ---# 正常情况 print 输出到屏幕 (sys.stdout)# 我们可以将输出写入文件或变量original_stdout=sys.stdoutwithopen('log_output.txt','w',encoding='utf-8')asf:sys.stdout=f# 将标准输出重定向到文件print("这行文字不会出现在屏幕上,而是写入 log_output.txt")print("即使是 error 信息,如果用 print 也会去这里")sys.stdout=original_stdout# 恢复标准输出print("输出已恢复,现在这句话在屏幕上。")# --- 读取多行输入 (直到遇到空行或 Ctrl+D/Z) ---print("请输入多行文本 (双击回车结束):")lines=[]whileTrue:try:line=input()ifnotline:breaklines.append(line)exceptEOFError:breakprint(f"你一共输入了{len(lines)}行。")

内存中的 I/O (io.StringIO / io.BytesIO)

fromioimportStringIO,BytesIO# --- 字符串流 ---sio=StringIO()sio.write("第一行\n")sio.write("第二行\n")# 获取指针位置print(f"当前指针位置:{sio.tell()}")# 回到开头sio.seek(0)# 像读文件一样读取content=sio.read()print("内存中的内容:")print(content)sio.close()# --- 字节流 (常用于网络传输模拟) ---bio=BytesIO()bio.write(b"Binary data here")bio.seek(0)data=bio.read()print(f"读取到的字节:{data}")

高性能 I/O: pathlib 和 异步 (Modern Python)

高性能io-demo1
frompathlibimportPath p=Path('.')# 当前目录# 列出所有 .py 文件print("当前的 Python 文件:")forfileinp.glob('*.py'):print(f"-{file.name}(大小:{file.stat().st_size}bytes)")# 快速读写config_path=Path('config.ini')config_path.write_text("[settings]\nmode=prod",encoding='utf-8')print(f"配置内容:{config_path.read_text(encoding='utf-8')}")
高性能io-异步文件io
importasyncio# 如果没有安装 aiofiles,请注释掉下面这行并跳过此函数演示try:importaiofilesexceptImportError:aiofiles=Noneasyncdefasync_file_operation():ifnotaiofiles:print("未安装 aiofiles,跳过异步示例。请先运行: pip install aiofiles")returnfilename='async_test.txt'# 异步写入asyncwithaiofiles.open(filename,'w',encoding='utf-8')asf:awaitf.write("这是异步写入的内容\n")awaitf.write("不会阻塞主线程\n")# 异步读取asyncwithaiofiles.open(filename,'r',encoding='utf-8')asf:content=awaitf.read()print("异步读取结果:")print(content)# 运行异步函数ifaiofiles:asyncio.run(async_file_operation())

常规建议

1、日常脚本:首选 with open(…) 和 pathlib。
2、数据处理:使用 csv 和 json 模块。
3、大文件处理:务必分块读取 (read(chunk_size)) 或 逐行迭代,避免内存溢出。
4、Web 服务/高并发:考虑使用 io.StringIO 减少磁盘 IO,或在异步框架中使用 aiofiles。
5、二进制文件:记得加 ‘b’ 标志,且不要指定 encoding。

http://www.jsqmd.com/news/498940/

相关文章:

  • 通义千问2.5-7B对比测试:与同类7B模型效果实测对比
  • Linux系统的基本指令
  • SEER‘S EYE 预言家之眼性能优化:利用ComfyUI可视化工作流编排推理流程
  • YOLOv12模型导出实战:TensorRT Engine转换完整教程
  • 链表和数组到底如何选用?
  • 6ES7407-0KA01-0AA0西门子电源模块
  • 奶爸建站笔记
  • 基于SpringBoot+Vue的高校就业招聘系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 1990–2024年各省外商直接投资水平
  • Java 入门必学:final、单例、枚举、抽象类、接口
  • 乙巳马年春联生成终端开发者案例:接入微信公众号菜单快捷入口
  • 【OpenClaw 全面解析:从零到精通】第003篇:OpenClaw 技术依赖与生态栈详解
  • PaddlePaddle-v3.3镜像体验:无需配置,直接上手目标检测项目
  • Z-Image-Turbo_UI界面实战体验:生成你的第一张AI头像
  • 解放 OpenClaw!cpolar 穿透让本地 AI 突破空间限制
  • AI教材生成新趋势:高效工具助力,低查重教材信手拈来!
  • Clawdbot+Qwen3:32B部署教程:从零搭建Web网关直连聊天服务
  • AIVideo在智能家居中的创新应用:家庭视频日志
  • 手把手教你用ONNX Runtime部署YOLO11:含NMS配置与C++推理优化
  • SmolVLA与ComfyUI工作流整合:可视化AI应用开发指南
  • Spring中的控制反转(IoC)和依赖注入(DI)
  • Anaconda环境管理:为Qwen-Image-Edit-F2P创建独立的Python运行环境
  • 5步搞定雪女-斗罗大陆-造相Z-Turbo:开箱即用的AI绘画工具
  • AI辅助调试:10分钟定位复杂Bug的实战技巧
  • Hugo PaperMod多语言博客搭建完整指南:快速实现国际化内容展示
  • 2026年吉林白石材采购决策指南:五大核心服务商深度解析与战略选择 - 2026年企业推荐榜
  • YOLOv9训练推理镜像实测:无需配置环境,小白也能快速上手目标检测
  • AUTOSAR从入门到精通-【自动驾驶】毫米波雷达与激光雷达对比自动驾驶感知核心传感器解析
  • 雪女-斗罗大陆-造相Z-Turbo技术原理可视化:用信息图展示其Diffusion生成过程
  • 基于Cobbler的系统自动化安装部署——原理