Python IO 基本编程示例

一. 基本概念

  1. 同步和异步
    同步:CPU 等待 IO 的执行结果
    异步:CPU 不等待 IO 的执行结果
    即:同步和异步的区别就是是否等待 IO 执行的结果

  2. 回调模式
    打个比方:汉堡做好后,服务员跑来告诉你,这就是回调

  3. 轮询模式
    汉堡做好后,服务员会了短信告诉你,而你需要不停的检查手机,这就是轮询

二. 文件的读写

  1. 以只读的方式打开文件
# 如果文件不存在,open() 函数就会抛出一个 IOError 异常
f = open("d:/TestData/test.txt", "r")
# 如果文件打开成功,返回一个文件对象,此对象可以调用 read() 方法可以一次读取文件的全部内容,返回一个str对象
content = f.read()
# 关闭文件对象,用以释放系统资源,因为操作系统同一时间能打开的文件数量是有限的
f.close()
  1. 无论是否读错都正确关闭文件
try:f = open("e:/TestData/test.txt", "r")print(f.read())
finally:if f:f.close() 
  1. 用更简单的方式打开文件(with...open
# 该方式会自动调用 close() 方法
with open("d:/TestData/test.txt", "r") as f_obj:print(f_obj.read())
  1. 说明:调用 read() 方法时会一次读取文件的全部内容,如果文件太大,会爆内存
    保险起见,可以按如下方式避免上述风险:
    1)调用 read(size) 方法,每次读取 size 个字节的内容
    2)调用 readline() 可以每次读取一行内容
    3)调用 readlines() 一次读取所有内容,并按行返回 list
with open("e:/TestData/test.txt", "r", encoding = "utf-8") as f_obj:lines = f_obj.readlines()for line in lines:print(line.strip())
  1. 读二进制文件
f = open("d:/TestData/test.txt", "rb")
print(r.read())
f.close()
  1. 字符编码
# 要读取非 UTF-8 编码的文件,需要给 open() 函数传入 encoding 参数
f = open("d:/TestData/test.txt", "r", encoding = "gbk")
print(f.read())
f.close()# 遇到编码不规范的文件,可能会报 UnicodeDecodeError 异常,
# 出现这种情况的原因可能是文件中夹杂了一些非法的编码字符,
# 可以使用 error 参数,表示遇到验证码错误后如何处理,下面的操作是直接忽略
f = open("d:/TestData/test.txt", "r", encoding = "utf-8", error = "ignore")
print(f.read())
f.close()
  1. 写文件
    Note: 当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入,只有调用 close() 方法时,操作系统才保证把没有写入的数据全部写入磁盘,如果忘记调用 close() 方法,那么很有可能数据只有一部分写入到了磁盘,造成数据的丢失。所以,还是用方式二:with 语句保险。
    'w'方式写文件的时候,如果文件原来已经存在,那么会将原来的数据覆盖,可以传入'a'以追加的方式写入文件。
# 方式一:
f = open("d:/TestData/test.txt", "w")
f.write("Hello world!)
f.close()# 方式二:以追加的方式写入文件,并自动关闭文件
with open("d:/TestData/test.txt", "wa") as f_obj:f.write("Hello world!")

三. StringIO 和 BytesIO

  • StringIO 是在内存中读写 String
    BytesIO 是在内存中读写 Byte
  1. StringIO
# 方式一:
from io import StringIO
f = StringIO()
f.write("Hello ")
f.write("world!")
print(f.getvalue())    # 获取值# 方式二:
from io import StringIO
f = StringIO("Hello world!")
f.getvalue()    # 获取值
  1. BytesIO
    StringIO 操作的只能是 string,如果要操作二进制数据,就需要使用 BytesIO。
# 方式一:
from io import BytesIO
f = BytesIO()
f.write("中文".encode("utf-8"))
print(f.getvalue())# 方式二:
from io import BytesIO
f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
print(f.getvalue())

四、操作文件和目录

  1. 如果要对系统的文件和目录进行操作,则需要引入 os 模块
import osprint(os.name)  # 获取操作系统的类型
# Note: 如果是 posix,说明系统是 Linux/Unix/Mac OS X, 如果是 nt,就是 Windows 系统print(os.uname())  # 获取系统的详细信息. Note: 注意,这个函数在 Windows 系统上是不提供的
  1. 查看环境变量
import osprint(os.environ)  # 打印系统所有环境变量的值

获取某个环境变量的值,可以调用 --> os.environ.get('key')

import osprint(os.environ.get('PATH'))  # 打印环境变量中 PATH 的值# 打印环境变量中 Test 的值,如果没有此值,则用 default 代替
print(os.environ.get('Test', 'default'))  
  1. 操作文件和目录
    操作文件和目录的函数一部分放在 os 模块中,一部分放在 os.path 模块中
  • 查看、创建、删除目录
    Note: 对路径的合并和拆分并不要求目录和文件真实存在,它们只是对字符串进行操作
import os# 查看当前目录的绝对路径
print(os.path.abspath('.'))# 把两个路径合成一个路径打印出来
print(os.path.join('d:/testdir', 'aa'))  # 打印 ‘d:/testdir/aa’# 创建目录
os.mkdir("d:/testdir")  # 此方法不可以级联创建
os.makedirs("d:/testdir/aa")  # 级联创建# 删除一个目录
os.rmdir("d:/testdir")  # 不可级联删除
os.removedirs("d:/testdir/aa")  # 级联删除# 分拆目录
# 1. 获取最后一个文件或者目录
print(os.path.split("d:/testdir/file.txt"))  # 打印 --> ('d:/testdir', 'file.txt')
# 2. 获取文件扩展名
print(os.path.splitext("d:/testdir/file.txt"))  # 打印 --> ('d:/testdir/file', '.txt')
  • 文件的删除和重命名
# 文件重命名
os.rename("test.txt", "test.py")# 删除文件
os.remove("test.py")
  • 文件的复制
    由于 os 模块不提供文件的复制操作,可以用 shutil 模块来实现复制文件的操作
import shutilshutil.copyfile("d:/testdir/file.txt", "d:/file.txt")

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

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

相关文章

mysql中in的用法详解

mysql中in的用法详解 一、基础用法 mysql中in常用于where表达式中,其作用是查询某个范围内的数据。 select * from where field in (value1,value2,value3,…)当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择 s…

keyProperty=“id“ 和useGeneratedKeys=“true“作用

keyProperty“id“ 和useGeneratedKeys“true“作用 使用 mysql 自增长序列&#xff0c;新插入一条数据时&#xff0c;怎么得到主键&#xff1f; 加入以下属性即可&#xff1a; useGeneratedKeys“true” keyProperty“id” <insert id"insertSelective" para…

mvn install:install-file将本地一个中央仓库没有的jar包,推到本地仓库----所有依赖不上仓库不能用

mvn install:install-file将本地一个中央仓库没有的jar包&#xff0c;推到本地仓库----所有依赖不上仓库不能用! 前提&#xff1a;maven等环境配置Ok 目标&#xff1a;把中央仓库没有的&#xff0c;部门内部 自研开发的jar&#xff0c;推到私服或者本地服务器&#xff0c;给相…

ZooKeeper 的工作流程

ZooKeeper 集群中的角色简介&#xff1a; Leader&#xff1a; 负责发起投票和决议&#xff0c;更新系统状态Follower&#xff1a;用于接收客户端请求并向客户端返回结果&#xff0c;在选主过程中参与投票Observer&#xff1a; 可以接收客户端连接&#xff0c;将写请求转发给 L…

TikTok真题第4天 | 1366. 通过投票对团队排名、1029.两地调度、562.矩阵中最长的连续1线段

1366. 通过投票对团队排名 题目链接&#xff1a;rank-teams-by-votes/ 解法&#xff1a; 这道题就是统计每个队伍在每个排名的投票数&#xff0c;队伍为A、B、C&#xff0c;则排名有1、2、3&#xff0c;按照投票数进行降序排列。如果有队伍在每个排名的投票数都一样&#xf…

idea Maven图标的使用

idea Maven图标的使用

动态规划算法之数塔问题

package cn.gldwolf.bigdata;/* 3 12 56 23 4 78 34 69 34 19 12 3 54 12 34 *//* 思路&#xff1a;从最底层往上走&#xff0c;判断下层两个节点中的最大值&#xff0c; 并将最大值与上层节点中的值相加得到这一步的最大值&#xff0c; 将最大值保存到新的数塔中 …

Log4j 配置详解

1. Log4j 简介 Log4j 有三个主要的组件&#xff1a; Loggers&#xff08;记录器&#xff09;&#xff1a;日志类别和级别 Appenders&#xff08;输出源&#xff09;&#xff1a;日志要输出的地方 Layouts&#xff08;布局&#xff09;&#xff1a;日志以何种形式输出 1.1 Log…

Iterator主要有三个方法:hasNext()、next()、remove()详解

Iterator主要有三个方法&#xff1a;hasNext()、next()、remove()详解 一、Iterator的API 关于Iterator主要有三个方法&#xff1a;hasNext()、next()、remove()hasNext:没有指针下移操作&#xff0c;只是判断是否存在下一个元素next&#xff1a;指针下移&#xff0c;返回该指…

Java获取登录用户IP地址

Java获取登录用户IP地址 /*** param * return * throws * description * author wqd* date 2021/9/21 13:45*/public static String getIpAddr(HttpServletRequest request) {String ip request.getHeader("x-forwarded-for");if (ip null || ip.length() 0 || &q…

Kafka Shell 基本操作

1. 启动集群每个节点的进程 nohup kafka-server-start.sh \ /home/hadoop/apps/kafka_2.11-1.1.0/config/server.properties \ 1>~/logs/kafka_std.log \ 2>~/logs/kafka_err.log &2. 创建 Topic 解释说明&#xff1a; –create --> 创建 Topic 的选项 –zookee…

Spark 简介

1. 什么是 Spark 官网&#xff1a;http://spark.apache.org Spark 是一个快速、通用、可扩展的大数据分析引擎。 Spark 是基于内存计算的大数据并行计算框架 1.1 Spark 的特点 快&#xff1a;与 Hadoop 的 MapReduce 相比&#xff0c;Spark 基于内存的运算要快 100 倍以上&a…

Linux环境下安装Mysql5.7

本文记录下我近期在Linux环境下安装Mysql5.7的实践经历。 服务器版本Mysql版本Centos 7.65.7.32 1. 下载Mysql 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 进入页面后选择你需要的版本进行下载&#xff0c;这里提供了2种格式&#xff1a;tar.gz和…

Redis 入门及实战

目录 1. Redis 基本概念 2. Redis 的优势 3. Redis 适用场景 4. Redis-3.2.6 安装(未整理)与测试 5. 使用 Redis 的 Java API 客户端——Jedis 6. 数据结构 6.1 String -- 字符串 6.1.1 String 使用概述 6.1.2 String 常用操作 6.1.3 String 使用案例 6.2 List -- 列…

HBase 简介

HBase 是一个通过大量廉价机器解决海量数据的调整存储和读取的分布式数据库解决方案 HBase 的特点&#xff1a; 高并发&#xff0c;易扩展&#xff0c;解决海量数据集的随机实时增删改查HBase 本质依然是 Key-Value 数据库&#xff0c;不支持 join 等复杂操作不支持复杂的事务…

Flink官网自学笔记

1. What is Apache Flink? Apache Flink 是一款用来进行分布式流数据和批数据处理的开源平台。Apache Flink 是一个对有界数据流和无界数据流进行有状态计算的框架和分布式处理引擎。Flink 被设计用于在所有常见的集群环境中运行&#xff0c;以内存中的速度和任意规模进行计算…

HBase Java API 代码开发

1. API 介绍 几个主要 HBase API 类和数据模型之间的对应关系&#xff1a; Java 类 HBase 数据模型 Admin 数据库&#xff08;Database&#xff09; HBaseConfiguration Table 表&#xff08;Table&#xff09; HTableDescriptor 列簇&#xff08;Column Family&#…

HBase 原理

1. HBase 底层原理 1.1 系统架构 1.1.1 Client 职责 1. HBase 有两张特殊的表&#xff1a; .META.: 记录了用户所有表拆分出来的 Region 映射信息&#xff0c;.META. 可以有多个 Region -ROOT-(新版中已去掉这一层): 记录了 .META. 表的 Region 信息&#xff0c;-ROOT- 只有…

用IDEA debug按键功能

用IDEA debug按键功能 一、断点 断点键&#xff0c;是用户在所选行代码处标记的功能点&#xff0c;表示在debug时代码执行到此处暂停。 注&#xff1a;断点可设置多个 二、启动debug 在设置好断点后单击此功能键&#xff0c;启动debug功能。 三、中止任务 点击该功能键&a…

HBase 的表设计

1 ColumnFamily 设计 追求的原则是&#xff1a;在合理的范围内能尽量少的减少列簇就尽量减少列簇。 最优设计是&#xff1a;将所有相关性很强的 Key-Value 都放在同一个列簇下&#xff0c;这样既能做到查询效率最高&#xff0c;也能保持尽可能少的访问不同的磁盘文件。 以用…