python里文件读写操作
文件读写操作一种基本操作,但是里面也存在很多需要注意的问题,例如字符编码、内存缓冲、指针位置等等。如果忽视这些问题就会引起很多不必要的麻烦。简单来说,文件的读写分为几个过程:
- 打开文件,并定义操作文件的方式(读、写or读写)
- 通过句柄对文件进行操作
- 关闭文件
打开文件的模式通常有以下几种:
- r,只读模式(默认)
- w,只写模式(不可读,通常用次方式创造一个新文件)
- a,追加模式(可读;不存在就会创建,存在会追加)
- 同时还存在,r+(指针位置),w+,a+,同时也存在rb,wb,ab代表处理二进制文件
文件的指针问题:
首先,打开一个文件,如下:
漂泊在无尽的夜
遭受了无数的欺骗
冠冕堂皇的借口它只是你的诡辩
我心中有梦对你谈的利弊根本不屑
因为
前方的路还很远
不能局限在一个焦点
如果你眼光狭隘不懂蜕变,怎能看到我的心里面
我渴望的不是稳定、数十年磨一剑
我想要出去闯、迎接创新不断改变
希望你们能发现这世界的真善美
别再心机boy为了利益像个鬼
就算现在你能将我击退
待我卷土重来东山再起让你后悔
此文件编码是gbk模式的,所以打开文件时,要说明encoding='utf-8’,才能正确打开文件。
- 当我们对一个文件进行只读操作时,指针的起始位置都会在文件的起始位置,但是注意一个问题,当使用seek()切换指针位置的时候,指针偏移的量是代表的字节,所以,如果以rb的形式打开,就不会报错,但是如果以uft-8的形式打开,除非是seek()的字节是三的倍数,否则就会报错(因为utf8中一个汉字代表三个字节)。
with open('file_wr.text','r',encoding='utf-8') as f:
f.seek(3)
print(f.readline())
result:
泊在无尽的夜
with open('file_wr.text','r',encoding='utf-8') as f:
f.seek(4)
print(f.readline())
result:
Traceback (most recent call last):
File "D:/pytwice/day1/homework_for_day1/文件读写.py", line 5, in <module>
print(f.readline())
File "C:\Users\z00428606\AppData\Local\Programs\Python\Python36\lib\codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 0: invalid start byte
- 当我们对文件进行写操作的时候,无论如何偏移指针,就相当于对一个空文件从零开始进行写操作。
- 当我们对文件进行r+操作的时候,可以认为有两个指针,一个是读指针,一个是写指针,读指针和只读模式一样,写指针则是在文件的末尾进行追加操作。
- 对于w+......和w感觉没什么区别,读也读不出来......忘记他吧!
还有一个很重要的事情:flush。
我们进行文件读写操作时,写东西进去的时候,数据首先会进入内存缓冲区,然后再存到硬盘上,但是,存入内存缓冲区的文件不会一收到数据就发给硬盘,这样效率太低了,浪费资源。所以,一般情况下,都是等待内存缓冲区存好足够多的数据的时候,才会统一存到硬盘上面。这种情况下,就很大程度的节约了资源。但是,在某些特殊场景下,这种方式存在重大的安全隐患,比如突然断电、死机等等意外情况都会导致内存缓冲区的数据清空,在一些特殊的行业(金融、银行等)就会存在很大的风险(你刚存完钱的时候ATM机后台断电了,你找妈妈哭去!)。所以,有一种方法可以实现,及时刷新,发一条数据,内存收到,就会立马存到硬盘上。就是flush功能。
# Author:Zhang Zhao with open('file_wr.text','w',encoding='utf-8') as f:
f.write('zz')
f.flush()
看看就好!
忘记一个!!tell功能,很简单,就是显示指针的位置:
# Author:Zhang Zhao with open('file_wr.text','r+',encoding='utf-8') as f:
f.seek(6)
print(f.tell()) result:6
python里文件读写操作的更多相关文章
- 【Python】文件读写操作
Python的文件读写有点类似php的文件读写.php的文件读写已经在<[php]让记事本成为你调控变量的控制台>(点击打开链接)说过了,以下用一个小样例说明Python的文件读写. 在F ...
- python的文件读写操作
文件读写 本文转自廖雪峰老师的教程https://www.liaoxuefeng.com/wiki/1016959663602400/1017607179232640 读写文件是最常见的IO操作.Py ...
- python之文件读写操作笔记
对不同类的文件操作,需要调用相关的库文件,一般情况下,可以选择建立:写文件函数和读文件函数.在写文件与读文件函数中 我们可以采用:with open('文件名','w', encoding='utf ...
- python进阶--文件读写操作
Python读写文件 1. open 使用open打开文件后一定要记得调用 文件对象的close()方法.比如可以用try --finally语句来确保最后能关闭文件. >>>f1 ...
- python之文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)的作用
'r':只读.该文件必须已存在. 'r+':可读可写.该文件必须已存在,写为追加在文件内容末尾. 'rb':表示以二进制方式读取文件.该文件必须已存在. 'w':只写.打开即默认创建一个新文件,如果文 ...
- python 文件读写操作(24)
以前的代码都是直接将数据输出到控制台,实际上我们也可以通过读/写文件的方式读取/输出到磁盘文件中,文件读写简称I/O操作.文件I/O操作一共分为四部分:打开(open)/读取(read)/写入(wri ...
- python(三)一个文件读写操作的小程序
我们要实现一个文件读写操作的小程序 首先我们有一个文件 我们要以"============"为界限,每一个角色分割成一个独立的txt文件,按照分割线走的话是分成 xiaoNa_1. ...
- c语言文件读写操作总结
C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...
- Python之文件读写
本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input ...
随机推荐
- H5的Web Audio Api
概述 研究Web Audio Api的主要原因是:工作中需要在ios中实现声音的淡出效果,主要是通过setInterval来改audio标签的volume属性实现的,但是ios上面volume属性是只 ...
- Core 接口发布报错
An error occurred while starting the application 提示:启动应用程序时发生错误 这个错误在Startup启动项里面 要找具体的报错位置 如下 这样就可以 ...
- 【云服务器部署】---Linux下安装MySQL
[云服务器部署]---Linux下安装MySQL 有关如何阿里云ECS建网站,推荐一片文章,我是是通过这篇文章安装tomcat和jdk的 网址:阿里云ECS建网站(建站)超详细全套完整图文教程! 注意 ...
- rest-framework之权限组件
权限 权限 作用 : 校验用户是否有权限访问 检测权限肯定是在用户认证通过之后,所有可以直接在request中取出用户做判断 先定义一个类,继承 BasePermission. from rest_f ...
- 课程回顾-Convolutional Neural Networks
为什么卷积层计算量更低paddingStrided convolution多维卷积LeNet 参数卷积网络的好处参数共享稀疏连接经典网络实现LeNet-5AlexNetVGGResNet残差块iden ...
- 剑指offer例题分享--8
前言:继续分享,加油! 面试题44: 代码如下: #include<iostream> #include<stdlib.h> using namespace std; int ...
- HashMap source code view(1)
前言 HashMap source code view 类注释 Hash table based implementation of the Map interface. This implement ...
- javaweb之Filter过滤器详解
快速入门 1.新建一个类,实现Filter接口 2.实现doFilter()方法,打印一句话,来证明能够进行拦截 3.在web.xml中进行配置(参照Servlet配置) 4.访问一个页面,看看能不能 ...
- Unity UI性能优化技巧
本文将介绍一些提升Unity UI性能的技巧.更多优化技巧,可以观看Unity工程师Ian Dundore在Unite Europe 2017的演讲<使用Unity性能提升技巧>. 1.划 ...
- OJ:析构函数实现多态
Description 下面程序的输出结果是: destructor B destructor A 请完整写出 class A. 限制条件:不得为 class A 编写构造函数. #include & ...