python-文件操作,文件指针,buffering:缓冲区,编码描述符及其读写,以及上下文管理.一站式详解

本文主要是介绍python-文件操作,文件指针,buffering:缓冲区,编码描述符及其读写,以及上下文管理.一站式详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录标题

  • 冯诺依曼体系架构
  • 文件IO常用操作
  • 打开操作
    • open的参数
      • r模式
      • w模式:**没有文件**-进行创建;**有文件**-进行覆盖
      • x模式:**有文件**-直接抛异常;**没有文件**-创建,只写打开
      • a模式:**有文件**-只写打开,进行追加;**没有文件**-创建
      • rb模式:只读二进制
      • wb模式-只写二进制
      • - r+/w+增加缺失能力
  • 文件指针,指向当前字节位置
    • seek偏移的是字符还是字节?
    • 文本模式下
    • 二进制模式下
  • buffering:缓存区
    • 简介
    • 缓冲和缓存的区别?
      • 缓冲数据结构:
      • 缓存数据结构:
      • 缓冲的目的是:
      • 缓存的目的是:
    • open()方法的buffering参数设置
  • 参数编码描述符encoding
    • encoding:编码,仅文本模式使用
    • 其他参数
      • errors
      • newline
  • read
  • 行读取
    • readline(size=-1)
    • readlines()
    • 注意事项
  • write写入
  • close
  • 其他(返回类型都是布尔值)
  • 上下文管理
    • 引子
    • 为了解决上述问题这里就需要使用"上下文管理"格式:
    • 使用上下注意事项:
  • 练习:指定一个源文件,事项copy到目录
  • 练习:有一个文件,对其进行单词统计,不区分大小写,计算单词重复最多的10个单词

冯诺依曼体系架构

在这里插入图片描述
一般说IO操作,指的是文件IO,如果指的是网络IO,都会直接说网络IO

文件IO常用操作

文件操作无非就是读和写

open 打开
在这里插入图片描述
read 读取
write 写入
close 关闭
readline 行读取
readlines 多行读取
seek 文件指针操作
tell 指针位置

打开操作

f = open("test") # 返回的是文件对象 file object
print(f.read())
f.close() # 用完就关闭

open的参数

file:
打开或者要创建的文件名.如果不指定,默认是当前路径
mode模式:
在这里插入图片描述

r模式

f = open("test","r") # 只读
f.read()
f.write("abc") # 抛出错误
f.close()

w模式:没有文件-进行创建;有文件-进行覆盖

f = open("test","w") # 只写 
f.write("abc")
f.close()

x模式:有文件-直接抛异常;没有文件-创建,只写打开

f = open("test2","x")

运行结果
在这里插入图片描述

a模式:有文件-只写打开,进行追加;没有文件-创建

f = open("test","a")
f.write("abc")

rb模式:只读二进制

f = open("test","rb")
print(f.read())
f.close()

运行结果
在这里插入图片描述

wb模式-只写二进制

f = open("test","wb")
f.write("啊".encode(encoding="gbk")) # 把中文转化bytes用encode()
f.close()

- r+/w+增加缺失能力

f = open("test1","r+")

运行结果
在这里插入图片描述
可以观察到,r+增加缺失能力,但是没有改变r的特性,r的特性是要求文件必须存在,才能打开成功.

文件指针,指向当前字节位置

mode = r,指针起始在0
mode = a,指针起始在末尾

f.tell()显示指针当前位置
f.seek(offset[,whence])移动文件指针位置.offest偏移多少字节,whence从哪里开始

seek偏移的是字符还是字节?

seek偏移的是字节

文本模式下

whence 0 缺失值,表示从头开始,正数
whence 1 表示从当前位置,offset只能用0
whence 2 表示从末尾,offset只能用0

二进制模式下

whence 0 缺失值,表示从头开始,offset正数
whence 1 表示从当前位置,offset可正可负
whence 2 表示从末尾,offset可正可负
注意:
向后seek可以越界,越界返回空字符;但是向前seek不能越界,否则抛异常

f = open("test","rb+")
f.write(b"addffg")
f.seek(50) # 向后
f.read() # 返回''空
f.seek(-20,2) # 向前
f.read() # OSError

buffering:缓存区

简介

缓冲区是一个内存空间,一般是使用一个FIFO队列(先进先出),到缓冲区满了或者到阀值了,数据会被flush到磁盘上.

缓冲和缓存的区别?

缓冲数据结构:

是一个列表或者是队列

缓存数据结构:

是一个字典

缓冲的目的是:

一堆数据排个队放哪暂存数据,减缓数据进入磁盘的速度.

缓存的目的是:

暂时性存储数据(掉电即失),使用字典数据结构为了最快速度的找到自己存储的内容,帮助硬件更快的运行

open()方法的buffering参数设置

  • -1缺省buffer大小:默认是8192个字节,8192/1024 = 8k
  • 0只在二进制模式使用,表示关buffer,文本下不支持
  • 1只在文本模式使用,表示行缓冲.意思就是见到换行符就flush
    在二进制下表示就1个字节
  • 大于1:二进制下,表示指定大小,文本下指定大小还依旧表示为默认值
  • flush()将缓冲区数据写入磁盘
  • close()关闭前会调用flush()

为方便记忆以上总结为:
文本就默认,二进制可以指定大小.一般情况下默认是个比较好的选择,除非你明确知道你在做什么,否则不调整他

参数编码描述符encoding

encoding:编码,仅文本模式使用

Npne表示使用缺省编码,依赖操作系统
在这里插入图片描述

其他参数

errors

不设置,直接默认

newline

一般不设定
在这里插入图片描述
系统分隔符os.linesep -->\r\n回车换行
\n换行
\r回车
当写时,None表示所有的"\n换行"都会被替换成为->\r\n回车换行,当遇见\r时候就不进行替换

read

read(size=-1)
size表示读取的多少个字符或字节;负数或者None表示读取到结尾

行读取

readline(size=-1)

一行行读取文件内容.size设置一次能读取行内几个字符或字节

readlines()

读取所有行的列表.

注意事项

行读取内容以后基本不推荐使用,直接使用,以下方式:

f = open("file","r+") # 返回一个可迭代对象
for line in f:print(line)  #file文件内容,一行行打印出来f.close()

write写入

write(s),把字符串s写入到文件中并返回字符的个数
writelines(lines),将字符串列表写入文件

close

释放文件对象,flus并关闭文件对象

其他(返回类型都是布尔值)

f.seekable()是否可seek
f.radable()是否可读
f.writable()是否可写
closed是否已经关闭

上下文管理

引子

在这里插入图片描述
当出现上述问题时我们怎么解决那??

为了解决上述问题这里就需要使用"上下文管理"格式:

with open(“test”) as f:
f.read()

使用上下注意事项:

1.上下文管理的语句块并不会开启新的作用域
2.with语句块执行完的时候,会自动关闭文件对象

上下文管理内部实现的内部原理源码详解

练习:指定一个源文件,事项copy到目录

def copyFile(src,dst):with open(src) as f1:with open(dst,"w+") as f2:f2.write(f1.read())
copyFile("file","file2")         

练习:有一个文件,对其进行单词统计,不区分大小写,计算单词重复最多的10个单词

这篇关于python-文件操作,文件指针,buffering:缓冲区,编码描述符及其读写,以及上下文管理.一站式详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/212535

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

10. 文件的读写

10.1 文本文件 操作文件三大类: ofstream:写操作ifstream:读操作fstream:读写操作 打开方式解释ios::in为了读文件而打开文件ios::out为了写文件而打开文件,如果当前文件存在则清空当前文件在写入ios::app追加方式写文件ios::trunc如果文件存在先删除,在创建ios::ate打开文件之后令读写位置移至文件尾端ios::binary二进制方式

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学