python异步读写文件_一文彻底搞懂python文件读写
Python文件读写
一,I/O操作
I/O在计算机中是指Input/Output,也就是Stream(流)的输入和输出。这里的输入和输出是相对于内存来说的,Input Stream(输入流)是指数据从外(磁盘、网络)流进内存,Output Stream是数据从内存流出到外面(磁盘、网络)。程序运行时,数据都是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方(通常是磁盘、网络操作)就需要IO接口。
操作系统是个通用的软件程序,其通用目的如下:
硬件驱动
进程管理
内存管理
网络管理
安全管理
I/O管理
二,文件读写原理及操作步骤
1. 文件读写实现原理
文件读写就是一种常见的IO操作。那么根据上面的描述,可以推断python也应该封装操作系统的底层接口,直接提供了文件读写相关的操作方法。
我们将数据写入文件时,操作系统不会立刻把数据写入磁盘,而是先把数据放到内存缓冲区异步写入磁盘。当调用close方法时,操作系统会保证把没有写入磁盘的数据全部写到磁盘上,否则可能会丢失数据,所以,*文件读写操作完成后,应该及时关闭*。
2. 文件读写操作步骤
1)打开文件,获取文件描述符
2)操作文件描述符–读/写
3)关闭文件
三,python文件打开模式
文件打开模式
描述
r
以只读模式打开文件,并将文件指针指向文件头;如果文件不存在会报错
w
以只写模式打开文件,并将文件指针指向文件头;如果文件存在则将其内容清空,如果文件不存在则创建
a
以只追加可写模式打开文件,并将文件指针指向文件尾部;如果文件不存在则创建
r+
在r的基础上增加了可写功能
w+
在w的基础上增加了可读功能
a+
在a的基础上增加了可读功能
b
读写二进制文件(默认是t,表示文本),需要与上面几种模式搭配使用,如ab,wb, ab, ab+(POSIX系统,包括Linux都会忽略该字符)
r+,w+,a+区别:
r+会覆盖当前文件指针所在位置的字符,如原来文件内容是"Hello,World",打开文件后写入"hi"则文件内容会变成"hillo, World"
w+与r+的不同是,w+在打开文件时就会先将文件内容清空,不知道它有什么用
a+与r+的不同是,a+只能写到文件末尾(无论当前文件指针在哪里)
四,python代码实现
初级:
# 第一步:(以只读模式)打开文件
f = open('song.txt', 'r', encoding='utf-8')
# 第二步:读取文件内容
print(f.read())
# 第三步:关闭文件
f.close()
中级:
f = ''
try:
f = open('song.txt', 'r', encoding='utf-8')
print(f.read())
num = 10 / 0
finally:
print('>>>>>>finally')
if f:
f.close()
最佳:
with语句会在其代码块执行完毕之后自动关闭文件。
with open('song.txt', 'r', encoding='utf-8') as f:
print(f.read())
print(f.closed)
五,Python文件读取相关方法
方法
描述
read()
一次读取文件所有内容,返回一个str
read(size)
每次最多读取指定长度的内容,返回一个str;在Python2中size指定的是字节长度,在Python3中size指定的是字符长度
readlines()
一次读取文件所有内容,按行返回一个list
readline()
每次只读取一行内容
此外,还要两个与文件指针位置相关的方法
方法
描述
seek(n)
将文件指针移动到指定字节的位置
tell()
获取当前文件指针所在字节位置
读取指定长度的内容 with open('song.txt', 'r', encoding='utf-8') as f:
print(f.read(12))
读取文件中的一行内容 with open('song.txt', 'r') as f:
print(f.readline().decode('utf-8'))
3.遍历打印一个文件中的每一行
方式一:先一次性读取所有行到内存,然后再遍历打印
with open('song.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
print(line)
这种方式的缺点与read()方法是一样的,都是会消耗大量的内存空间。
方式二:通过迭代器一行一行的读取并打印
with open('song.txt', 'r', encoding='utf-8', newline='') as f:
for line in f:
print(line)
file类的其他方法:
方法
描述
flush()
刷新缓冲区数据,将缓冲区中的数据立刻写入文件
next()
返回文件下一行,这个方法也是file对象实例可以被当做迭代器使用的原因
truncate([size])
截取文件中指定字节数的内容,并覆盖保存到文件中,如果不指定size参数则文件将被清空; Python2无返回值,Python3返回新文件的内容字节数
write(str)
将字符串写入文件,没有返回值
writelines(sequence)
向文件写入一个字符串或一个字符串列表,如果字符串列表中的元素需要换行要自己加入换行符
fileno()
返回一个整型的文件描述符,可以用于一些底层IO操作上(如,os模块的read方法)
isatty()
判断文件是否被连接到一个虚拟终端,是则返回True,否则返回False
encoding(编码)参数的默认值是与平台有关的,比如Window上默认字符编码为GBK,Linux上默认字符编码为UTF-8。
decoding(解码)
六,结语
前面花了几天时间复习python基础语法和面向对象知识,现在开始除了每天上网课外,就会抽时间深入学习python相关知识,继续加油,奥里给!!
道友们可以加我的微信公众号 梦码城 ,接下来的日子里我会在公众号上发布各种与编程方面的总结学习知识,也会送各位小伙伴大量的学习资源,梦码城,期待你的加入
文章不易,道友们点个赞加个关注鼓励下梦码呗
python异步读写文件_一文彻底搞懂python文件读写相关推荐
- 一文彻底搞懂C++文件流, 文件读写,fstream、seekg、seekp等的使用。
彻底搞懂C++文件流. 首先需要头文件#include< fstream > fstream可以把它理解成一个父类,包含的子类有ifstream和ofstream等, 所以一般直接创建一个 ...
- layer output 激活函数_一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)...
在"一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)"中我们详细介绍了BP算法的原理和推导过程,并且用实际的数据进行了计算演练.在下篇中,我们将自己实现BP算法(不使用第 ...
- python主要用于系统编程_一文带你了解python是什么?能做什么?为什么(附赠40G项目实战+绝版电子书)...
什么是 Python? Python 是一门流行的编程语言.它由 Guido van Rossum 创建,于 1991 年发布. 它用于:当然小编这里也准备一份适合你的学习资料爬虫 ,python学习 ...
- python对话机器人框架_长篇文讲解:使用Python AIML搭建聊天机器人的方法示例(收藏)...
本文内容主要介绍了使用Python AIML搭建聊天机器人的方法示例,我觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随我过来看看吧 AIML全名为Artificial Intelligenc ...
- linux windows文件 编码_一站式解读彻底搞懂Python编码
" Python的编码问题,有一个完整的体系.如果不从整体上进行讨论,总是云里雾里的." 从敲代码到屏幕看到字符,涉及好几个关键的环节.每一个环节对于字符的正常输出都有很大的影响. ...
- 敲黑板嘞!一文彻底搞懂 Python 生成器!
本文作者:Rocky0249 公众号:Python空间 写在之前 Python 的高级语言特性一直是我们学习 Python 的一个难点,大部分人并没有做到熟练的掌握,甚至去学习它都感觉很困难,「生成器 ...
- python可视化数据分析交互作用_一文轻松看懂线性回归分析的交互作用!
作者:丁点helper 来源:丁点帮你 前几天的文章,我们聚焦在回归分析,今天来看看在回归分析中常常要研究的一类难点问题--交互作用的探究. 交互(interaction),字面上不太好理解,但是从数 ...
- mysql怎么实现事务序列化_一文快速搞懂MySQL InnoDB事务ACID实现原理(转)
这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔 ...
- cookie代码加时间多久出现一次_一文彻底搞懂Cookie、Session、Token到底是什么
前言 在了解这三个概念之前我们先要了解HTTP是无状态的Web服务器,什么是无状态呢?就像上面夏洛特烦恼中经典的一幕对话一样,一次对话完成后下一次对话完全不知道上一次对话发生了什么.如果在Web服务器 ...
最新文章
- 一个同步github上fork过来的项目的批处理脚本
- 潭州课堂25班:Ph201805201 django 项目 第三十三课 后台文章标签查询提交到前台,删除功能实现(课堂笔记)...
- MM模块几个移动类型之间的区别
- python 处理 excel格式文件
- Asp.Net生命周期系列二
- 什么时候告白最合适?
- duilib中界面的布局方式
- AWS服务器上安全组端口设置和访问的问题
- 单一工作流的执行➕回滚框架初步想法(基于事件驱动模式)
- 关于更改apache和mysql的路径的问题..
- 没有5年测开经验,还真说不清Python生成器、迭代器、装饰器
- 机器学习:更多的数据总是优于更好的算法吗?
- 卷积定理及常见傅里叶变换表
- nuxt 低版本浏览器不兼容处理
- GEEM2引擎微端架设基本教程
- Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
- 解决投影仪放映PPT时左右、上下出现黑边问题
- 【Wwise】一篇文看懂WwiseUnity热更
- 2018年北航计算机学院推免夏令营经验
- linux7安装网卡驱动,CentOS 7 安装无线网卡驱动