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 ...
随机推荐
- 小程序上传wx.uploadFile - 小程序请假
小程序上传wx.uploadFile UploadTask wx.uploadFile(Object object) 将本地资源上传到服务器.客户端发起一个 HTTPS POST 请求,其中 cont ...
- springboot下载文件
例子 /** * 下载假期模板 */ @ResponseBody @RequestMapping(value = "/downloadDolidayTemplate.do") pu ...
- Python爬虫-萌妹子图片
最近发现一个可以看图的地方,一张张翻有点累,毕竟只有一只手(难道鼠标还能两只手翻?).能不能下到电脑上看呢,毕竟不用等网速,还可以预览多张,总之很方便,想怎么就怎么,是吧? 刚好这几天在学python ...
- sql的转义字符单引号
在SQL中,我们都知道单引号 ' 表示字符串的开始和结束符号,如: select * from students where name = '小明'; 但如果字符串里面有单引号时,应该怎么查询呢? 这 ...
- JSON库的使用研究(一)
最近用到JSON,收集了一些资料,整理如下: 选择一个合适的JSON库要从多个方面进行考虑: 字符串解析成JSON性能 字符串解析成Java Object性能 Java Object转JSON性能 集 ...
- IntelliJ IDEA 与 SVN配置
问题背景 如果开发工具使用的是IntelliJ IDEA,版本管理工具使用的是SVN. 就涉及到SVN集成的问题,但是可能会遇到选择在IDEA中配置SVN的时候,在SVN的安装bin目录找不到文件 s ...
- mongoose的基本操作方法
mongoose 1. const mongoose = require("mongoose");导入mongoose模块 2. //注意url地址最后面的地址是数据库的名称 ...
- session的一些笔记
HttpSession hs = request.getSession();//以键值对方式存储数据在session中hs.setAttribute("code", code);/ ...
- Github page搭建博客使用自定义插件的方法
Github page的后台程序是由Jekyll搭建,但由于Github的保护措施,非认证的plugin一般不会被Github page支持,但可以使用一些小技巧来绕过屏蔽. 以个人page为例,个人 ...
- nginx入门教程
nginx入门教程 一.概述 什么是nginx? Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器. 什么是反向 ...