跨境电商网站建设/长沙seo结算
目录
- 专栏列表
- 引言
- 基础概念
- 什么是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)
调用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(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
编程的详细教程。
相关文章:

Python教程(十五):IO 编程
目录 专栏列表引言基础概念什么是IO? 同步IO vs 异步IO同步IO(Synchronous IO)异步IO(Asynchronous IO) Python中的IO标准IO标准输入和输出 文件IO文件操作的上下文管理器打开文件读取文件操作内存中的数据 高级文件操…...

Qt窗口交互场景、子窗口数据获取
一、前言 在现代软件开发中,图形用户界面(GUI)的设计不仅仅关乎美观,更在于用户体验和功能的无缝衔接。Qt框架以其强大的跨平台能力和丰富的组件库,成为众多开发者构建GUI应用的首选工具。在Qt应用中,窗口…...

【C++学习笔记 18】C++中的隐式构造函数
举个例子 #include <iostream> #include <string>using String std::string;class Entity{ private:String m_Name;int m_Age; public:Entity(const String& name):m_Name(name), m_Age(-1) {}Entity(int age) : m_Name("UnKnown"), m_Age(age) {}…...

单元训练01:LED指示灯的基本控制
蓝桥杯 小蜜蜂 单元训练01:LED指示灯的基本控制 #include "stc15f2k60s2.h" #include <intrins.h>#define LED(x) \{ \P2 P2 & 0x1f | 0x80; \P0 x; \P2 & 0x1f; \}…...

Sanic 和 Go Echo 对比
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…...

内部排序(插入、交换、选择)
一、排序的部分基本概念 1. 算法的稳定性 若待排序表中有两个元素 Ri 和 Rj ,其对应的关键字相同即 keyi keyj,且在排序前 Ri 在 Rj 的前面,若使用某一排序算法排序后,Ri 仍然在 Rj 的前面,则称这个排序算法是稳定的…...

Vue3的多种组件通信方式
父组件向子组件传递数据 (Props) 父组件 <template><child :name"name"></child> </template><script setup> import { ref } from vue import Child from ./Child.vueconst name ref(小明) </script> 子组件 <template…...

【C++语言】list的构造函数与迭代器
1. list的介绍及使用 1.1 list的介绍 list的文档介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点…...

Python 安装 PyTorch详细教程
本章教程,介绍如何安装PyTorch,介绍两种安装方式,一种是通过pip直接安装,一种是通过conda方式安装。 一、查看CUDA版本 二、安装PyTorch 1、pip安装方式 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu1162、conda安装方式 …...

html页面缩放自适应
html页面缩放自适应 一、为什么页面要进行缩放自适应 在我们一般web端进行页面拼接完成后,在web端的显示正常(毕竟我们是按照web端进行页面拼接完成的),那么要是用其他设备打开呢,比如手机或者平板,这时候…...

024.自定义chormium-修改屏幕尺寸
自定义chormium-修改屏幕尺寸 屏幕尺寸信息雷同太大,用作指纹信息,作用不多。 但多个类似小信息组合在一起的话,也就是成唯一指纹了。积少成多吧。 一、如何使用js获取屏幕信息 将下面的代码复制进F12控制台 console.log("screen.widt…...

测试环境搭建整套大数据系统(十九:kafka3.6.0单节点做 sasl+acl)
1. 增加配置配文件信息 vim /opt/kafka_2.13-3.6.1/config/server.properties listenersPLAINTEXT://192.168.50.240:9092,OUTER://192.168.50.240:9094# Listener name, hostname and port the broker will advertise to clients. # If not set, it uses the value for &quo…...

小白零基础学数学建模应用系列(五):任务分配问题优化与求解
文章目录 一. 分配问题1.1 问题背景1.2 假设条件1.3 问题要求1.4 数学建模 二. 实际案例2.1 问题背景2.2 假设条件2.3 问题要求2.4 模型建立2.5 求解代码2.6 结果分析2.6.1 分配方案的解释2.6.2 总时间的优化2.6.3 潜在的现实应用 一. 分配问题 1.1 问题背景 分配问题&#x…...

怎么防止源代码泄露?十种方法杜绝源代码泄密风险
源代码是软件开发的核心资产之一,保护其不被泄露对企业的安全至关重要。源代码泄露不仅可能导致知识产权的丧失,还可能给企业带来经济损失和品牌形象的损害。以下是十种有效的方法,可以帮助企业杜绝源代码泄密的风险。 1. 代码加密 对源代码…...

uniapp left right 的左右模态框
标题 这是组件 <template><div class"content-wrapper"><divv-for"(vla, i) in products":key"i":class"[content-page, getPageClass(i)]"><slot :data"vla"><!-- 用户自定义的内容 --><…...

Docker Compose与私有仓库部署
一、Docker Compose工具 1.1什么是Docker Compose Docker Compose 的前身是 Fig,它是一个定义及运行多个 Docker 容器的工具。使用Docker Compose 时,只需要在一个配置文件中定义多个 Docker 容器,然后使用一条命令启 动这些容器。Docker Co…...

Layout 布局组件快速搭建
文章目录 设置主题样式变量封装公共布局组件封装 Logo 组件封装 Menu 菜单组件封装 Breadcrumb 面包屑组件封装 TabBar 标签栏组件封装 Main 内容区组件封装 Footer 底部组件封装 Theme 主题组件 经典布局水平布局响应式布局搭建 Layout 布局组件添加 Layout 路由配置启动项目 …...

北京城市图书馆-非遗文献馆:OLED透明拼接屏的璀璨应用
在数字化与传统文化深度融合的今天,北京城市图书馆的非遗文献馆以一场前所未有的视觉盛宴,向世人展示了OLED透明拼接屏的非凡魅力与无限可能。这座集阅读、展示、体验于一体的非遗文献馆,通过2*7布局的OLED透明拼接屏,不仅为传统非…...

OpenCV图像滤波(12)图像金字塔处理函数pyrDown()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 函数主要是对图像进行模糊处理并将其降采样。 默认情况下,输出图像的大小计算为 Size((src.cols1)/2, (src.rows1)/2),但…...

css如何使一个盒子水平垂直居中
方法一:利用定位(常用方法,推荐) <style> .parent{width: 500px;height: 500px;border: 1px solid #000;position:relative; }.child {width: 100px;height: 100px;border: 1px solid #999;position:absolute;top: 50%;left: 50%;margin-top: -50…...

机器人等方向学习和研究的目标
核心目标类似: 学习一个知识点用时越来越短,研究一个系统效率越来越高。 目标 没有目标是常态,十分普遍。 但其实,目标也可以很宽泛。 感谢朋友们一直以来的鼓励帮助,倍感荣幸,非常感谢。-CSDN blink-…...

封装一个细粒度的限流器
文章目录 原因限流对象限流后的做法怎么确定限流阈值观测业务性能数据压测借鉴链路上的其他服务手动计算 四种静态限流算法令牌桶漏桶固定窗口与滑动窗口 手写限流算法令牌桶漏桶固定窗口滑动窗口 分布式限流的具体实现 原因 尽管云原生网关里有统一入口的限流(根据…...

【Spring Boot - 注解】@ResponseBody 注解:处理 JSON 响应
文章目录 一、ResponseBody 注解概述1. 注解的功能2. 主要功能 二、ResponseBody 的工作原理1. 接口定义2. 消息转换器3. 自动配置与默认行为 三、ResponseBody 的应用场景1. RESTful API 的实现2. 返回复杂数据结构3. 错误处理和异常处理 四、ResponseBody 的配置和自定义1. 自…...

无人机航拍与ArcGIS融合实战:从地表观测到空间数据可视化的全方位指南!无人机图像拼接数据处理与分析、可视化与制图
目录 第一章 无人机航拍基本流程、航线规划与飞行实践 第二章 无人机图像拼接软件的学习与操作实践 第三章 无人机图像拼接典型案例详解 第四章 无人机图像拼接数据在GIS中的处理与分析 第五章 无人机图像拼接数据在GIS中的可视化与制图 第六章 综合案例:无人机航拍植被动…...

日期转时间濯
tfunction(date_str) local code ,time World:getTimeFromDateString(date_str) return time/(60*60*24) end print(t(2024-08-16)-t(2024-08-3))...

【计算机网络】TCP实战
其实有了UDP的基础,TCP不管怎么说学习起来都还是比较舒服的,至少是比直接就学习TCP的感觉好。 这篇文章最多就是介绍一下起手式,如果想带业务的话和UDP那篇是完全一样的,就不进行演示了。 总的来说还是很简单的。 目录 Echo服务端…...

使用Python制作贪吃蛇小游戏
引言 贪吃蛇游戏是一款经典的电子游戏,玩家通过控制一条不断增长的蛇在格子内移动,并吃掉随机出现的食物来获得分数。随着分数的增加,蛇的身体也会越来越长,游戏的难度也随之提升。在本文中,我们将详细介绍如何使用Py…...

线程的退出
方式1 pthread_exit Void pthread_exit (void *retval) 功能: 结束调用的线程 参数: retval //退出状态值 //需要传的是,退出状态值的地址 注意: 1.pthread_exit 本身表示结束线程 如果用在main函数中 表示结束主线程…...

【AI 绘画】Q版人物定制生成
AI 绘画-PulID手办定制 1. 效果展示 本次测试主要结果展示如下: 牛仔风 古风 2. 基本原理 PuLID是一种类似于 ip-adapter 的恢复面部特征的方法。它同时使用 insightface 嵌入和 CLIP 嵌入,类似于 ip-adapter faceid plus 模型所做的。但是,在将图像传递给 CLIP 之前,还…...

Python爬虫——爬取某网站的视频
爬取视频 本次爬取,还是运用的是requests方法 首先进入bilibili官网中,选取你想要爬取的视频,进入视频播放页面,按F12,将网络中的名称栏向上拉找到第一个并点击,可以在标头中,找到后续我们想要…...