目录
- 专栏列表
- 引言
- 基础概念
- 什么是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(Asynchronous IO)
异步IO允许程序在发起IO请求后立即去做其他事情,而不需要等待IO操作完成。当IO操作完成时,操作系统会通知程序,或者通过回调函数、事件、或未来(promises)等方式来处理结果。
程序发起IO请求后,不是等待IO操作完成,而是继续执行其他任务。当操作系统通知IO操作完成时,程序再处理IO结果。
特点:
- 非阻塞,提高程序的并发性能。
- 编程模型相对复杂,需要处理回调、事件循环等。
Python中的IO
Python提供了多种IO操作的方式,包括:
- 标准IO:使用
input()
函数从标准输入读取数据,使用print()
函数向标准输出发送数据。 - 文件IO:使用内置的
open()
函数来打开文件,并进行读写操作。 - 网络IO:通过第三方库如
requests
进行网络请求,或使用内置库如socket
进行底层网络通信。
标准IO
标准输入和输出
在Python中,可以通过input()
函数读取用户输入的字符串,并通过print()
函数输出信息到控制台。
# 标准输入示例
user_input = input("请输入你的名字:")
print("你好," + user_input + "!")
文件IO
文件操作的上下文管理器
with
语句提供了一种优雅的方式来处理文件操作,它可以自动关闭文件,即使发生异常也是如此。不用我们每次都像下面这样写, 需要手动去捕获异常,然后关闭文件
try:
f = open('example.txt', 'r')
print(f.read())
finally:
if f:
f.close()
打开文件
使用open()
函数可以打开一个文件,并指定操作模式,如'r'
(只读)、'w'
(只写)、'a'
(追加)等。
# 打开文件示例
with open('example.txt', 'w') as file:
file.write("Hello, IO!")
读取文件
使用open()
函数打开文件后,可以读取文件内容。
# 读取文件示例
with open('example.txt', 'r') as file:
content = file.read()
print(content)
高级文件操作
读写二进制文件
除了文本文件,Python也可以读写二进制文件。
# 写入二进制文件示例
with open('image.png', 'wb') as file:
file.write(b'\x89PNG\r\n\x1a\n')
# 读取二进制文件示例
with open('image.png', 'rb') as file:
data = file.read()
使用文件指针
可以控制文件指针的位置,实现文件的随机访问。
with open('example.txt', 'r+') as file:
file.seek(0, 2) # 移动到文件末尾
file.write(" New content")
网络IO
使用requests
库
- 可以参考前文:Python教程(十四):Requests模块详解
requests
是一个简单易用的HTTP库,可以用来发送网络请求。
import requests
response = requests.get('https://baidu.com')
print(response.text)
使用socket
库
socket
是Python的底层网络通信库,可以用来实现TCP/IP通信。
import socket
# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('www.example.com', 80))
s.send(b'GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n')
response = s.recv(1024)
s.close()
print(response.decode())
异常处理
在进行IO操作时,可能会遇到各种异常,如文件不存在、网络连接错误等。使用try...except
语句可以捕获并处理这些异常。
try:
with open('nonexistent.txt', 'r') as file:
file.read()
except FileNotFoundError:
print("文件不存在")
总结
IO编程是Python编程中的一个重要组成部分。从简单的标准IO到复杂的文件和网络IO,Python提供了丰富的功能和库来支持各种IO操作。掌握这些技能,可以帮助你构建更加强大和灵活的应用程序。
参考文献
- Python官方文档关于IO的部分。
requests
官方文档。socket
编程的详细教程。