集团公司网站推广方案怎么做,网站移动端seo,微网站排版,青岛济南网页设计公司目录 专栏列表引言基础概念什么是IO#xff1f; 同步IO vs 异步IO同步IO#xff08;Synchronous IO#xff09;异步IO#xff08;Asynchronous IO#xff09; Python中的IO标准IO标准输入和输出 文件IO文件操作的上下文管理器打开文件读取文件操作内存中的数据 高级文件操… 目录 专栏列表引言基础概念什么是IO 同步IO vs 异步IO同步IOSynchronous IO异步IOAsynchronous IO Python中的IO标准IO标准输入和输出 文件IO文件操作的上下文管理器打开文件读取文件操作内存中的数据 高级文件操作读写二进制文件使用文件指针 网络IO使用requests库使用socket库 异常处理总结参考文献 专栏列表
Python教程十面向对象编程OOPPython教程十一单元测试与异常捕获Python教程十二面向对象高级编程详解Python教程十三常用内置模块详解Python教程十四Requests模块详解 正文开始 如果觉得文章对您有帮助请帮我三连订阅谢谢 引言
IO在计算机中指Input/Output也就是输入和输出。输入输出IO是计算机程序与外部世界交互的基本方式。在Python中IO编程涉及到文件读写、网络通信等操作。
基础概念
什么是IO
IO是Input/Output的缩写即输入和输出。在编程中IO操作包括从用户那里获取输入如键盘输入和向用户发送输出如屏幕显示或文件写入。
同步IO vs 异步IO
同步IOSynchronous IO和异步IOAsynchronous IO是两种不同的IO操作模式同步IO简单但效率可能较低特别是在IO密集型的应用中。异步IO可以提高效率和并发性但编程模型更复杂。
同步IOSynchronous IO 在同步IO中当一个IO操作如读取文件、网络请求发起时发起请求的线程会被阻塞直到IO操作完成。这意味着在等待IO操作完成的过程中线程不能执行其他任务。 #mermaid-svg-1PiUg3IsREbxGTx7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1PiUg3IsREbxGTx7 .error-icon{fill:#552222;}#mermaid-svg-1PiUg3IsREbxGTx7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1PiUg3IsREbxGTx7 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-1PiUg3IsREbxGTx7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1PiUg3IsREbxGTx7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1PiUg3IsREbxGTx7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1PiUg3IsREbxGTx7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1PiUg3IsREbxGTx7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1PiUg3IsREbxGTx7 .marker.cross{stroke:#333333;}#mermaid-svg-1PiUg3IsREbxGTx7 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1PiUg3IsREbxGTx7 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1PiUg3IsREbxGTx7 .cluster-label text{fill:#333;}#mermaid-svg-1PiUg3IsREbxGTx7 .cluster-label span{color:#333;}#mermaid-svg-1PiUg3IsREbxGTx7 .label text,#mermaid-svg-1PiUg3IsREbxGTx7 span{fill:#333;color:#333;}#mermaid-svg-1PiUg3IsREbxGTx7 .node rect,#mermaid-svg-1PiUg3IsREbxGTx7 .node circle,#mermaid-svg-1PiUg3IsREbxGTx7 .node ellipse,#mermaid-svg-1PiUg3IsREbxGTx7 .node polygon,#mermaid-svg-1PiUg3IsREbxGTx7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1PiUg3IsREbxGTx7 .node .label{text-align:center;}#mermaid-svg-1PiUg3IsREbxGTx7 .node.clickable{cursor:pointer;}#mermaid-svg-1PiUg3IsREbxGTx7 .arrowheadPath{fill:#333333;}#mermaid-svg-1PiUg3IsREbxGTx7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1PiUg3IsREbxGTx7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1PiUg3IsREbxGTx7 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-1PiUg3IsREbxGTx7 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-1PiUg3IsREbxGTx7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1PiUg3IsREbxGTx7 .cluster text{fill:#333;}#mermaid-svg-1PiUg3IsREbxGTx7 .cluster span{color:#333;}#mermaid-svg-1PiUg3IsREbxGTx7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1PiUg3IsREbxGTx7 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 程序发起IO请求 等待IO操作完成 接收IO结果 特点
简单直观容易理解和实现。线程在IO操作完成前被阻塞不能做其他事情。
异步IOAsynchronous IO 异步IO允许程序在发起IO请求后立即去做其他事情而不需要等待IO操作完成。当IO操作完成时操作系统会通知程序或者通过回调函数、事件、或未来promises等方式来处理结果。 #mermaid-svg-6SruzaQFy99x9x8R {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6SruzaQFy99x9x8R .error-icon{fill:#552222;}#mermaid-svg-6SruzaQFy99x9x8R .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-6SruzaQFy99x9x8R .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-6SruzaQFy99x9x8R .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-6SruzaQFy99x9x8R .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-6SruzaQFy99x9x8R .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-6SruzaQFy99x9x8R .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-6SruzaQFy99x9x8R .marker{fill:#333333;stroke:#333333;}#mermaid-svg-6SruzaQFy99x9x8R .marker.cross{stroke:#333333;}#mermaid-svg-6SruzaQFy99x9x8R svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-6SruzaQFy99x9x8R .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-6SruzaQFy99x9x8R .cluster-label text{fill:#333;}#mermaid-svg-6SruzaQFy99x9x8R .cluster-label span{color:#333;}#mermaid-svg-6SruzaQFy99x9x8R .label text,#mermaid-svg-6SruzaQFy99x9x8R span{fill:#333;color:#333;}#mermaid-svg-6SruzaQFy99x9x8R .node rect,#mermaid-svg-6SruzaQFy99x9x8R .node circle,#mermaid-svg-6SruzaQFy99x9x8R .node ellipse,#mermaid-svg-6SruzaQFy99x9x8R .node polygon,#mermaid-svg-6SruzaQFy99x9x8R .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-6SruzaQFy99x9x8R .node .label{text-align:center;}#mermaid-svg-6SruzaQFy99x9x8R .node.clickable{cursor:pointer;}#mermaid-svg-6SruzaQFy99x9x8R .arrowheadPath{fill:#333333;}#mermaid-svg-6SruzaQFy99x9x8R .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-6SruzaQFy99x9x8R .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-6SruzaQFy99x9x8R .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-6SruzaQFy99x9x8R .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-6SruzaQFy99x9x8R .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-6SruzaQFy99x9x8R .cluster text{fill:#333;}#mermaid-svg-6SruzaQFy99x9x8R .cluster span{color:#333;}#mermaid-svg-6SruzaQFy99x9x8R div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-6SruzaQFy99x9x8R :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 继续执行 IO完成通知 程序发起IO请求 执行其他任务 操作系统 处理IO结果 程序发起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)调用readlines()一次读取所有内容并按行返回list
for line in f.readlines():print(line.strip()) # 把末尾的\n删掉操作内存中的数据 很多时候数据读写不一定是文件也可以在内存中读写 , StringIO顾名思义就是在内存中读写str,StringIO操作的只能是str如果要操作二进制数据就需要使用BytesIO。 from io import StringIO,BytesIOs StringIO()
s.write(Hello)
s.write( -- )
s.write(World)
print(f获取内存s的值{s.getvalue()})# BytesIO
f BytesIO()
f.write(中文.encode(utf-8))
print(f获取内存f的值{f.getvalue()})高级文件操作
读写二进制文件
除了文本文件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 requestsresponse 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(bGET / 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到复杂的文件和网络IOPython提供了丰富的功能和库来支持各种IO操作。掌握这些技能可以帮助你构建更加强大和灵活的应用程序。
参考文献
Python官方文档关于IO的部分。requests官方文档。socket编程的详细教程。