Python教程(十五):IO 编程

news/2024/9/22 17:08:53/

目录

    • 专栏列表
    • 引言
    • 基础概念
      • 什么是IO?
    • 同步IO vs 异步IO
      • 同步IO(Synchronous IO)
      • 异步IO(Asynchronous IO)
    • Python中的IO
    • 标准IO
      • 标准输入和输出
    • 文件IO
      • 文件操作的上下文管理器
      • 打开文件
      • 读取文件
      • 操作内存中的数据
    • 高级文件操作
      • 读写二进制文件
      • 使用文件指针
    • 网络IO
      • 使用`requests`库
      • 使用`socket`库
    • 异常处理
    • 总结
    • 参考文献

专栏列表

  • Python教程(十):面向对象编程(OOP)
  • Python教程(十一):单元测试与异常捕获
  • Python教程(十二):面向对象高级编程详解
  • Python教程(十三):常用内置模块详解
  • Python教程(十四):Requests模块详解

在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


引言

IO在计算机中指Input/Output,也就是输入和输出。输入输出(IO)是计算机程序与外部世界交互的基本方式。在Python中,IO编程涉及到文件读写、网络通信等操作。

基础概念

什么是IO?

IO是Input/Output的缩写,即输入和输出。在编程中,IO操作包括从用户那里获取输入(如键盘输入)和向用户发送输出(如屏幕显示或文件写入)。
在这里插入图片描述
在这里插入图片描述

同步IO vs 异步IO

同步IO(Synchronous IO)和异步IO(Asynchronous IO)是两种不同的IO操作模式同步IO简单但效率可能较低,特别是在IO密集型的应用中。异步IO可以提高效率和并发性,但编程模型更复杂。

同步IO(Synchronous IO)

在同步IO中,当一个IO操作(如读取文件、网络请求)发起时,发起请求的线程会被阻塞,直到IO操作完成。这意味着在等待IO操作完成的过程中,线程不能执行其他任务。

程序发起IO请求
等待IO操作完成
接收IO结果

特点:

  • 简单直观,容易理解和实现。
  • 线程在IO操作完成前被阻塞,不能做其他事情。

异步IO(Asynchronous IO)

异步IO允许程序在发起IO请求后立即去做其他事情,而不需要等待IO操作完成。当IO操作完成时,操作系统会通知程序,或者通过回调函数、事件、或未来(promises)等方式来处理结果。

继续执行
IO完成通知
程序发起IO请求
执行其他任务
操作系统
处理IO结果

程序发起IO请求后,不是等待IO操作完成,而是继续执行其他任务。当操作系统通知IO操作完成时,程序再处理IO结果。

特点:

  • 非阻塞,提高程序的并发性能。
  • 编程模型相对复杂,需要处理回调、事件循环等。

Python中的IO

Python提供了多种IO操作的方式,包括:

  • 标准IO:使用input()函数从标准输入读取数据,使用print()函数向标准输出发送数据。
  • 文件IO:使用内置的open()函数来打开文件,并进行读写操作。
  • 网络IO:通过第三方库如requests进行网络请求,或使用内置库如socket进行底层网络通信。

标准IO

标准输入和输出

在Python中,可以通过input()函数读取用户输入的字符串,并通过print()函数输出信息到控制台。

python"># 标准输入示例
user_input = inpution">("请输入你的名字:"ion">)
printion">("你好," + user_input + "!"ion">)

文件IO

文件操作的上下文管理器

with语句提供了一种优雅的方式来处理文件操作,它可以自动关闭文件,即使发生异常也是如此。不用我们每次都像下面这样写, 需要手动去捕获异常,然后关闭文件

tryion">:f = openion">('example.txt'ion">, 'r'ion">) printion">(fion">.readion">(ion">)ion">)
finallyion">:if fion">:fion">.closeion">(ion">)

打开文件

使用open()函数可以打开一个文件,并指定操作模式,如'r'(只读)、'w'(只写)、'a'(追加)等。

python"># 打开文件示例
with openion">('example.txt'ion">, 'w'ion">) as fileion">:fileion">.writeion">("Hello, IO!"ion">)

读取文件

使用open()函数打开文件后,可以读取文件内容。

python"># 读取文件示例
with openion">('example.txt'ion">, 'r'ion">) as fileion">:content = fileion">.readion">(ion">) printion">(contention">)

调用readlines()一次读取所有内容并按行返回list

for line in fion">.readlinesion">(ion">)ion">:printion">(lineion">.stripion">(ion">)ion">) # 把末尾的'\n'删掉

操作内存中的数据

很多时候,数据读写不一定是文件,也可以在内存中读写 , StringIO顾名思义就是在内存中读写str,StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO

from io import StringIOion">,BytesIOs = StringIOion">(ion">)
sion">.writeion">('Hello'ion">)
sion">.writeion">(' -- 'ion">)
sion">.writeion">('World'ion">)
printion">(ion">f'获取内存s的值:ion">ion">{sion">.getvalueion">(ion">)ion">}'ion">)# BytesIO
f = BytesIOion">(ion">)
fion">.writeion">('中文'ion">.encodeion">('utf-8'ion">)ion">)
printion">(ion">f'获取内存f的值:ion">ion">{fion">.getvalueion">(ion">)ion">}'ion">)

在这里插入图片描述

高级文件操作

读写二进制文件

除了文本文件,Python也可以读写二进制文件。

python"># 写入二进制文件示例
with openion">('image.png'ion">, 'wb'ion">) as fileion">:fileion">.writeion">(b'\x89PNG\r\n\x1a\n'ion">)# 读取二进制文件示例
with openion">('image.png'ion">, 'rb'ion">) as fileion">:data = fileion">.readion">(ion">)

使用文件指针

可以控制文件指针的位置,实现文件的随机访问。

python">with openion">('example.txt'ion">, 'r+'ion">) as fileion">:fileion">.seekion">(0ion">, 2ion">)  # 移动到文件末尾fileion">.writeion">(" New content"ion">)

网络IO

使用requests

  • 可以参考前文:Python教程(十四):Requests模块详解
  • requests是一个简单易用的HTTP库,可以用来发送网络请求。
python">import requestsresponse = requestsion">.getion">('https://baidu.com'ion">)
printion">(responseion">.textion">)

使用socket

socket是Python的底层网络通信库,可以用来实现TCP/IP通信。

python">import socket# 创建socket对象
s = socketion">.socketion">(socketion">.AF_INETion">, socketion">.SOCK_STREAMion">)
sion">.connection">(ion">('www.example.com'ion">, 80ion">)ion">)
sion">.sendion">(b'GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n'ion">)
response = sion">.recvion">(1024ion">)
sion">.closeion">(ion">)
printion">(responseion">.decodeion">(ion">)ion">)

异常处理

在进行IO操作时,可能会遇到各种异常,如文件不存在、网络连接错误等。使用try...except语句可以捕获并处理这些异常。

python">tryion">:with openion">('nonexistent.txt'ion">, 'r'ion">) as fileion">:fileion">.readion">(ion">)
except FileNotFoundErrorion">:printion">("文件不存在"ion">)

总结

IO编程是Python编程中的一个重要组成部分。从简单的标准IO到复杂的文件和网络IO,Python提供了丰富的功能和库来支持各种IO操作。掌握这些技能,可以帮助你构建更加强大和灵活的应用程序。

参考文献

  • Python官方文档关于IO的部分。
  • requests官方文档。
  • socket编程的详细教程。

http://www.ppmy.cn/news/1509910.html

相关文章

uniapp--微信小程序无网络提示组件页面

uniapp–微信小程序无网络提示组件页面 1.组件页面fu-notwork.vue代码 <template><view class"fu-notwork" v-if"!isConnected"><view class"fu-count-df" v-if"mode full" :style"{ zIndex: zIndex }"&g…

[GYCTF2020]FlaskApp1

打开题目 简单的一个base64加解密小程序 查看提示&#xff0c;好像并没有什么用&#xff0c;题目是flask&#xff0c;可能是ssti模板注入 加密窗口{{77}},解密窗口e3s3Kzd9fQ ({{77}} 加密窗口没看到注入&#xff0c;解密窗口存在注入&#xff0c;是模板注入 读取文件内容&am…

Java语言程序设计基础篇_编程练习题*16.16(使用ComboBox和ListView)

目录 题目&#xff1a;*16.16&#xff08;使用ComboBox和ListView&#xff09; 习题思路 示例代码 结果展示 题目&#xff1a;*16.16&#xff08;使用ComboBox和ListView&#xff09; 编程一个程序&#xff0c;演示在列表中选择的条目。程序用组合框指定选择方式&#xff0c;…

物流快递外卖管理平台系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设残哥 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目、 源…

VS Code安装配置ssh服务结合内网穿透远程连接本地服务器详细步骤

文章目录 前言1. 安装OpenSSH2.VS Code配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

C语言典型例题36

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 例题3.4 输入一个字符&#xff0c;判别它是否为大写字母&#xff0c;如果是&#xff0c;将它转换为小写字母&#xff1a;如果不是&#xff0c;不转换。然后输出最后要输出的字符。 代码&#xff1a; //《C程序设计…

吴恩达open AI联合推出《大模型通关指南》免费pdf分享,手把手教你掌握大模型技术!

本书介绍 LLM&#xff08;Large Language Models&#xff09;正在逐步改变人们的生活&#xff0c;对于开发者来说&#xff0c;如何利用LLM提供的API快速、便捷地开发具备更强大能力、集成LLM的应用程序&#xff0c;以实现更新颖、更实用的功能&#xff0c;是一项急需学习的重要…

比OpenAI的Whisper快50%,最新开源语音模型

生成式AI初创公司aiOla在官网开源了最新语音模型Whisper-Medusa&#xff0c;推理效率比OpenAI开源的Whisper快50%。 aiOla在Whisper的架构之上进行了修改采用了“多头注意力”机制的并行计算方法&#xff0c;允许模型在每个推理步骤中预测多个token&#xff0c;同时不会损失性…