020-python函数和常用模块-文件操作
Python内置函数open,用来打开在磁盘上的文件,并返回一个文件对象,所有对该文件的后续操作都是通过这个"句柄"来进行的。
一、文件操作的三个步骤:
- 打开文件;
- 操作文件;
- 关闭文件。
二、打开文件:
1 文件句柄 = open('文件路径', '模式')
打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。
打开文件的基本模式:
- r ,只读模式【默认】
- w,只写模式【不可读;不存在则创建;存在则清空内容;】
- x, 只写模式【不可读;不存在则创建,存在则报错】
- a, 追加模式【可读; 不存在则创建;存在则只追加内容;】
1 f = open('db', 'r') # 只读,默认 2 f = open('db', 'w') # 只写,先清空原文件 3 f = open('db', 'x') # 文件存在,报错;不存在,创建并只写;python3中才出现的。 4 f = open('db', 'a') # 追加
1 f = open("db","r",encoding="utf-8") # 当文件打开出现乱码时,一般需要关注编码方式 2 data = f.read() # 默认读出为字符串str类型 3 print(data,type(data)) 4 5 #输出 6 admin|123 7 222|222 <class 'str'>
1 f = open("db","a",encoding="utf-8") 2 f.write("李杰") 3 f.close()
1 f = open('db','rb') #b表示以字节方式操作,二进制方式读取文件,不用设置编码类型。 2 data = f.read() 3 print(data,type(data)) 4 5 # 输出为字节类型 6 b'admin|123\r\n222|222\xe6\x9d\x8e\xe6\x9d\xb0' <class 'bytes'> 7 8 f = open("db", 'ab') # 以字节方式追加 9 f.write(bytes("王五", encoding="utf-8")) # 需要字节类型写入 10 f.close() 11 12 #文件内容 13 admin|123 14 222|222李杰王五 15 16 f = open("db", 'ab') 17 f.write("王五") # 错误示例 18 f.close() 19 20 #输出 21 略 22 TypeError: a bytes-like object is required, not 'str'
"+" 表示可以同时读写某个文件
- r+, 读写【可读,可写】,该模式为最常用的模式。
- w+,写读【可读,可写】,先清除文件内容,然后可以写读操作,不常用。
- x+ ,写读【可读,可写】,与w+类似,不常用。
- a+, 写读【可读,可写】,不管指针指向何处,最终都是在文件末尾追加,不常用。
"b"表示以字节的方式操作
- rb 或 r+b
- wb 或 w+b
- xb 或 w+b
- ab 或 a+b
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型
1 f = open("db","r+",encoding="utf-8") #读写模式,该模式为最常用的模式 2 data = f.read() # 指针移到最后 3 # print(f.tell()) 4 f.write("大刀") #在指针后进行数据写入,覆盖模式 5 f.close() 6 7 #文件内容 8 admin|123 9 222|222李杰王五大刀 10 11 12 f = open("db","r+",encoding="utf-8") 13 # 如果打开模式无 b,则read,按照字符读取;有b,则read按照字节读取。 14 data = f.read(1) 15 # tell当前指针所在的位置(字节) 16 print(f.tell()) 17 # 调整当前指针的位置(字节) 18 f.seek(1) 19 # 当前指针位置开始向后覆盖 20 f.write("7777") 21 f.close() 22 23 #程序输出 24 3 # f.read(1)按字符读取,第一个字符为“李”,因此当前指针在3的位置 25 26 #文件内容 27 �7777min|123 # f.seek(1)后,指针位置调整为1,使得“李”这个字符的三个字节被分割,最终导致乱码 28 222|222李杰王五
三、操作文件:
# read() # 无参数,读全部;有参数, # open方式有b,按字节 # open方式无b,按字符# tell() 获取当前指针位置(字节) # seek(1) 指针跳转到指定位置(字节) # write() 写数据,open方式有b,字节方式写入; open方式无b,字符方式写入。 # close # flush 强刷 # truncate 截断,指针为后的清空 # readline 仅读取一行
关于flush:
一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。
flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。
正常情况下缓冲区满时,操作系统会自动将缓冲数据写入到文件中。
至于close方法,原理是内部先调用flush方法来刷新缓冲区,再执行关闭操作,这样即使缓冲区数据未满也能保证数据的完整性。
如果进程意外退出或正常退出时而未执行文件的close方法,缓冲区中的内容将会丢失。
1 # for循环文件对象 f = open(xxx) 2 for line in f: 3 print(line)
四、关闭文件:
1 # 方法一: 2 f.close() 3 4 # 方法二: 5 with open('xb') as f: 6 pass
如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 及以后,with又支持同时对多个文件的上下文进行管理,即:
1 with open('log1') as obj1, open('log2') as obj2: 2 pass
五:额外
实现:从文件db1中获取每行信息,并逐行写入到文件db2中,第10行之后自动退出。
1 with open("db1","r",encoding="utf-8") as r,open("db2","w",encoding="utf-8") as w: 2 times = 0 3 for line in r: 4 times += 1 5 if times <= 10: 6 w.write(line) 7 else: 8 break
实现:对每行中包含特定字符串的,进行替换。
1 with open("db1","r",encoding="utf-8") as r,open("db2","w",encoding="utf-8") as w: 2 for line in r: 3 new_line = line.replace("111","vxvx") 4 w.write(new_line) 5 6 #db1文件 7 111111 8 22222 9 33333 10 11 #db2文件 12 vxvxvxvx 13 22222 14 33333
http://www.cnblogs.com/wupeiqi/articles/4950799.html
转载于:https://www.cnblogs.com/chhphjcpy/p/6083732.html
020-python函数和常用模块-文件操作相关推荐
- Python os模块文件操作(二)
Python os模块文件操作(二) os模块对文件夹和文件的操作很多.可以先看: https://blog.csdn.net/weixin_43790276/article/details/9867 ...
- Python os模块文件操作(一)
Python os模块文件操作(一) 一.文件描述符 在使用代码对文件进行操作时,为了指定操作的文件,避免不了要使用文件描述符,所以我们先介绍什么是文件描述符. 操作系统为了高效管理已经被打开的文件, ...
- php文件有哪几种,PHP常用的文件操作函数有哪些
PHP常用的文件操作函数有哪些 本文主要总结的PHP文件操作函数.当然,这只是部分,还有很多,我没有列出来.欢饮阅读参考! 一 .解析路径: 1 获得文件名: basename(); 给出一个包含有指 ...
- python复制文件shutil_Python常用模块——文件复制模块shutil
Python常用模块--文件复制模块shutil shutil模块 高级的文件.文件夹.压缩包处理模块 shutil.copyfileobj(fsrc, fdst) 将文件内容拷贝到另一个文件中 im ...
- Python中的常用模块
1.sys模块(内置模块) 在sys模块中定义了一些函数和变量,用来设置和获取系统的信息. # Python中的常用模块:sys模块 import sys sys.path.append('./tes ...
- C#常用的文件操作 (转)
C#常用的文件操作 C#常用的文件操作(网上收集) C#写入/读出文本文件,包括创建文件,追加文件,修改文件,等等操作,个人觉得很适用,所以收藏了,和大家分享 public void Page_Loa ...
- python开发_xml.etree.ElementTree_XML文件操作
python开发_xml.etree.ElementTree_XML文件操作_该模块在操作XML数据是存在安全隐患_慎用 xml.etree.ElementTree模块实现了一个简单而有效的用户解析和 ...
- Python包下载常用whl文件汇总:最全的Python whl集合
Python包下载常用whl文件汇总:最全的Python whl集合 对于Python开发者来说,我们经常需要下载各种第三方库或包,而这些包往往需要我们手动下载并安装.在Python中,我们通常使用p ...
- python 常用模块函数_python函数和常用模块(三),Day5
递归 反射 os模块 sys模块 hashlib加密模块 正则表达式 反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数 ...
最新文章
- 如何自定义MFC的窗口类名
- 爬虫入门二(urllib,urllib2)
- Kudu 使用注意点
- svn 中的url路径修改和 清除 svn用户名和密码
- LIBAVCODEC_VERSION_INT是哪里定义的?
- 什么是0day漏洞,1day漏洞和nday漏洞
- 原始LBP算法 代码
- STM32接入机智云--实现数据上传和命令下发
- 探秘广场舞:中老年市场绝佳切口?
- springboot基于协同过滤算法的书籍推荐毕业设计源码101555
- datedif函数mysql_DateDiff函数
- Scala 继承和特质
- 树莓派Pico-Raspberry Pi Pico简介
- python卡尔曼滤波室内定位_基于Unscented卡尔曼滤波的室内定位
- 在vc2008中用_crtBreakAlloc调试内存泄漏
- 普歌-飞灵团队-nuxt中jQuery报e.indexOf is not a function错误
- ol+天地图+geoserver_教程:使用GeoServer发布离线地图服务(WMS)
- 微信小程序例子——修改小程序的标题
- win10找不到wifi网络_当WiFi和4G网络齐飞,你的手机恐怕撑不到回家充电了…
- Docker 容器仓库之搭建私有仓库、hub仓库
热门文章
- perl语言得到的txt文档只有表头_编程语言排行榜第一Python,为何频繁遭受开发者的嫌弃!...
- mysql授权dml_Mysql DML DCL DDL
- mysql error 28,MySQL错误:Got error 28 from storage engine
- Win10的 IntelliJ idea中log4j2控制台中文乱码的几种处理方法
- NYOJ324 - 猴子吃桃问题
- java 声明是否合法,一个合法的Java源程序中定义了4个类,其中属性为public的类可能有( )个...
- Python入门--函数传递过程中实参的变化
- lua游戏脚本实例源码_Redis Lua脚本中学教程(上)
- [leetcode]174. 地下城游戏
- [leetcode] 554. 砖墙