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 ...
随机推荐
- 微信小程序设置web-view的业务域名
微信小程序设置web-view的业务域名 域名必备 你的域名必须要备案过 你的域名必须是https,而不能是http web-view 在小程序后台添加业务域名,只解析业务域名中的url网页地址的. ...
- linux scp 使用方法
scp虽然只有把文见发送到远端和从远端copy文件俩功能,但是常常把俩功能的先写什么给计混了,所以我就用通俗的大白话给总结了下,十分容易记忆,这里给大家分享一下.scp 我们常用的两个功能: (1)把 ...
- idea 过段时间java程序包不存在问题 ?
有时候我们在导入程序之后,系统会给出错误提示:Java:程序包xxxx不存在,现在我这里有一招,就是使用IDEA自动导入Java程序包,这也是IDEA的一大优点. 但是在看到这个问题的文章的时候,并不 ...
- JSON库的使用研究(三)
怎么选择JSON库? 从整体测试结果来看,总结如下: 用于序列化.反序列的功能,数量量小,吞吐量不大于10000每秒的,选择gson: 用于解析JSON的,还是用Fastjson吧,虽然听说坑很多. ...
- karma测试实践
karma是Google团队开发的一套前端测试运行框架,它不同于测试框架(jasmine,mocha等),它运行在这些测试框架之上,主要完成的工作有: 1.karma启动一个web服务器,生成包含js ...
- java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- PowerDesigner使用方法
我们需要创建一个测试数据库,一步一步来学习使用PowerDesigner,为了简单,我们在这个数据库中只创建一个Student表和一个Major表.其表结构和关系如下所示. 看看怎样用PowerDes ...
- OnlineJudge难度与正确度的相关性检验
本着做题的心态,上了东莞理工学院的 oj 网:在选择难度的时候发现有些题目通过率和难度可能存在着某些关系,于是决定爬下这些数据简单查看一下是否存在关系. 一.新建项目 我是用 Scrapy 框架爬取的 ...
- 给HTML页面指定元素添加属性,添加父元素
给HTML页面指定元素添加属性,添加父元素 下面拿一个给富文本中所有的图片增加layer弹窗效果. 思路: 给富文本父元素设置属性. 获取父元素里所有的img 此处用到querySelectorA ...
- 翻译:last_value()函数(已提交到MariaDB官方手册)
本文为mariadb官方手册:LAST_VALUE()的译文. 原文:https://mariadb.com/kb/en/last_value/我提交到MariaDB官方手册的译文:https://m ...