Python教程(十五):IO 编程

news2024/11/23 17:19:10

目录

    • 专栏列表
    • 引言
    • 基础概念
      • 什么是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()函数输出信息到控制台。

# 标准输入示例
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编程的详细教程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

go注册到eureka微服务

// 注册到 Eureka,goeureka会自动30秒发送一次心跳 package mainimport ("fmt""github.com/SimonWang00/goeureka""github.com/gin-gonic/gin""github.com/robfig/cron/v3""time""wbGo/configs" )typ…

【C++小白到大牛】红黑树那些事儿

目录 前言: 一、红黑树的概念 二、红黑树的性质 三、红黑树结点的定义 四、红黑树的插入 情况一:u存在且为红 情况二:u不存在/u存在且为黑 小总结: 原码: 五、红黑树的检验 六、性能比较 前言: …

Linux知识复习第4期

web服务器的基本用法 目录 1、安装 2、启动 3、默认发布目录 1、安装 yum install nginx -y # nginx安装 yum install httpd -y # apache安装 2、启动 systemctl enable --now httpd systemctl enable --now nginx 3、默认发布目录 /usr/www/html/ # …

Python OpenCV 影像处理:影像轮廓

► 前言 上篇介绍使用OpenCV Python对于图像上的二值化操作,二值化主要用途包括图像分割、物体侦测、文字识别等。这种转换可以帮助检测图像中的物体或特定特征,并提取有用的信息,本篇基于二值化操作进行近一步的操作,透过影像梯…

一六七、Linux安装go并部署go项目

Linux 下安装 Golang 获取Golang下载地址 标准官网:https://go.dev/国内镜像官网:https://golang.google.cn/ 安装 1. 进入终端,登入root su - root2. 来到应用安装目录 cd /usr/local3. 使用 wget 下载 如果没有安装 wget 可通过软件…

《向量数据库指南》——Dopple LAbs:展望未来:构建多模态交互的尖端体验

Dopple LAbs:展望未来:构建多模态交互的尖端体验 在快速迭代的科技领域,Dopple LAbs正以其前瞻性的视野和创新精神,引领着人机交互的新篇章。Sam及其团队近期通过一系列技术突破,显著增强了其服务的沉浸感和互动性,为用户带来了前所未有的视听盛宴。以下,我们将深入探讨…

智慧农业大数据助力智慧农业建设

1. 智慧农业概述 智慧农业作为现代农业发展的重要方向,融合了互联网、大数据、云计算、物联网等现代信息技术,旨在提高农业生产效率,实现精准化管理和产品溯源。通过智慧农业的实施,可以解决传统农业面临的信息不对称、融资困难等…

打工人上班适合用的蓝牙耳机推荐?几款开放式耳机推荐

日常工作的话,我还是比较推荐开放式蓝牙耳机的,它特别适合那些需要在长时间工作中保持专注和舒适度的环境,那开放式耳机其实还有一些主要的优点: 减少耳朵疲劳:由于开放式耳机不需要紧密贴合耳朵,因此可以…

复习之 java 锁

裁员在家,没有面试机会,整理整理面试知识点吧! 不得不知道的java 锁 Java 中,提供了两种方式来实现同步互斥访问(也就是锁):synchronized 和 Lock 多线程编程中,有可能会出现多个线…

使用静态住宅代理解锁YouTube营销的新维度

YouTube作为众多跨境商家的重要营销推广阵地,YouTube的运营数据与店铺的开单息息相关。那么如何做好YouTube营销来增加产品的知名度呢?如何高效运营YouTube矩阵并防止账号间的关联呢?下文介绍的静态住宅代理就能在YouTube营销上助你一臂之力。…

HTML知识点二——表单

表单&#xff1a; 基本语法&#xff1a; <form method"post" action"xxx"><p>名字&#xff1a;<input name"name" type"text"></p><p>密码&#xff1a;<input name"pass" type"pass…

音频进阶学习二——模数和数模转换中的采样、量化和编码

文章目录 前言一、频率连续时间信号的频率数字信号的频率 二、模数转换过程A/D转换三步 三、采样确定采样频率数模转换中的插值 四、量化量化过程量化误差 五、编码总结 前言 所有软件的运行都得益于硬件上的突破&#xff0c;数字信号是从40年前就开始高速发展的领域。得益于硬…

【机器学习】深度强化学习–RL的基本概念、经典场景以及算法分类

引言 深度强化学习&#xff08;Deep Reinforcement Learning, DRL&#xff09;是机器学习的一个分支&#xff0c;它结合了深度学习&#xff08;Deep Learning&#xff09;和强化学习&#xff08;Reinforcement Learning, RL&#xff09;的技术 文章目录 引言一、深度强化学习–…

为什么 React 的函数组件每次渲染执行两次

1.这是 React18 才新增的特性。 2.仅在开发模式("development")下&#xff0c;且使用了严格模式("Strict Mode")下会触发。 生产环境("production")模式下和原来一样&#xff0c;仅执行一次。 在 React 中&#xff0c;当你看到某些代码执行了多…

整合Rocketmq实现审批流消息推送

文章目录 Docker 部署 RocketMQ拉取 RocketMQ 镜像创建容器共享网络 部署NameServer创建目录并授予权限拷贝启动脚本启动容器NameServer 部署Broker Proxy创建挂载文件夹并授权创建broker.cnf文件拷贝启动脚本启动容器Broker 部署RocketMQ控制台&#xff08;rocketmq-dashboar…

12、springboot3 vue3开发平台-前端-记住我功能实现

文章目录 1. 前端用户信息保存2. 登录页面添加3. 后端实现 1. 前端用户信息保存 使用pinia持久化保存用户名密码 src/stores/remember-me.js // 定义 store import { defineStore } from "pinia" import {reactive} from vueexport const useRememberMeStore defi…

求职Leetcode算法题(7)

1.搜索旋转排序数组 这道题要求时间复杂度为o&#xff08;log n&#xff09;&#xff0c;那么第一时间想到的就是二分法&#xff0c;二分法有个前提条件是在有序数组下&#xff0c;我们发现在这个数组中存在两部分是有序的&#xff0c;所以我们只需要对前半部分和后半部分分别…

element ——tree组件懒加载数据、自定义label、修改高亮样式、回显点击状态

需求 整体宽高占一屏&#xff0c;超出滚动条tree组件点击懒加载每一级数据&#xff0c;一共三级三级节点前加icon&#xff0c;标识是否已学习点击高亮显示背景图横向超出省略显示或者横向滚动条纵向超出纵向滚动条修改其字体和间距☆☆☆☆☆从别的页面跳入回显三级点击状态 …

netsh int tcp show global查看TCP参数

TCP 全局参数 接收方缩放状态 : enabled 接收窗口自动调节级别 : normal 加载项拥塞控制提供程序 : default ECN 功能 : disabled RFC 1323 时间戳 : allowed 初始 RTO : 1000 接收段合并状态 : enabled 非 Sack Rtt 复原 : disabled 最大 SYN 重新传输次数 : 4 快速打开 : en…

CrowdTransfer:在AIoT社区中实现众包知识迁移

这篇论文的标题是《CrowdTransfer: Enabling Crowd Knowledge Transfer in AIoT Community》&#xff0c;由 Yan Liu, Bin Guo, Nuo Li, Yasan Ding, Zhouyangzi Zhang, 和 Zhiwen Yu 等作者共同撰写&#xff0c;发表在《IEEE Communications Surveys & Tutorials》上。以下…