python文件操作的一般步骤_Python基础之文件操作
应用程序运行过程中产生的数据最先都是存放于内存中的,若想永久保存下来,必须要保存于硬盘中。应用程序若想操作硬件必须通过操作系统,而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念,用户或应用程序对文件的操作,就是向操作系统发起调用,然后由操作系统完成对硬盘的具体操作。
文件操作的基本流程
#1. 打开文件,由应用程序向操作系统发起系统调用open(...),操作系统打开该文件,对应一块硬盘空间,并返回一个文件对象赋值给一个变量f
f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r
#2. 调用文件对象下的读/写方法,会被操作系统转换为读/写硬盘的操作
data=f.read()#3. 向操作系统发起关闭文件的请求,回收系统资源
f.close()
打开一个文件包含两部分资源:应用程序的变量f和操作系统打开的文件。在操作完毕一个文件时,必须把与该文件的这两部分资源全部回收,回收方法为:
1、f.close() #回收操作系统打开的文件资源
2、del f #回收应用程序级的变量
其中del f一定要发生在f.close()之后,否则就会导致操作系统打开的文件无法关闭,白白占用资源, 而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们,在操作完毕文件后,一定要记住f.close(),虽然我们如此强调,但是大多数读者还是会不由自主地忘记f.close(),考虑到这一点,python提供了with关键字来帮我们管理上下文
#1、在执行完子代码块后,with 会自动执行f.close()
with open('a.txt','w') as f:pass
#2、可用用with同时打开多个文件,用逗号分隔开即可
with open('a.txt','r') as read_f,open('b.txt','w') as write_f:
data=read_f.read()
write_f.write(data)
文件操作模式
只读模式
r模式
只能进行读不能进行别的操作
f = open('a.txt',mode='r',encoding='utf-8')
content=f.read()print(content)
f.close()#open中第一个参数放入的是要打开的文件名字,第二个参数是要对这个文件进行的操作,第三参数是用什么编码方式打开文件中的内容
f 可写成任意变量等,它被称作:文件句柄,文件操作符,或者文件操作对象等。
open 是Python调用的操作系统(windows,linux,等)的功能,而windows的默认编码方式为gbk,linux默认编码方式为utf-8,所以你的文件用什么编码保存的,就用什么方法打开,一般都是用utf-8。
mode为打开方式:常见的有r,w,a,r+,w+,a+.rb,wb,ab,等,默认不写是r。
流程就是打开文件,产生一个文件句柄,对文件句柄进行相应操作,关闭文件。
rb模式
rb只读字节的模式
f = open('b.jpg',mode='rb')
content=f.read()print(content)
f.close()
rb 读出来的数据是bytes类型,在rb模式下,不能encoding字符集
rb的作用:在读取非文本文件的时候,比如要读取mp3,图像,视频等信息的时候就需要用到rb,因为这种数据是没办法直接显示出来的
这个字节的模式是用于传输和存储
写模式
覆盖写模式:
在写文件的时候我们要养成一个写完文件就刷新的习惯. 刷新flush()
f = open('aaa.txt',mode='w',encoding='utf-8')
f.write('aaa')
f.flush()
f.close()
当我选择使用w模式的时候,在打开文件的时候就就会把文件中的所有内容都清空,然后在操作
注意:如果文件不存在使用w模式会创建文件,文件存在w模式是覆盖写,在打开文件时会把文件中所有的内容清空.
wb模式下,不可以指定打开文件的编辑,但是写文件的时候必须将字符串转换成utf-8的bytes数据
f = open('aaa.txt',mode='wb')
msg= '你好'.encode('utf-8')
f.write(msg)
f.flush()#刷新
f.close()
追加
只要是a或者ab,a+都是在文件的末尾写入,不论光标在任何位置.
在追加模式下,我们写入的内容后追加在文件的末尾
a模式如果文件不存在就会创建一个新文件
f1 = open('aaa.txt',mode='a',encoding='utf-8')
msg= f1.write('bbb')
读写模式
对于读写模式,必须是先读后写,因为光标默认在开头位置,当读完了以后再进行写入.
r+模式
#正常的读取内容, 写在文件末尾
f1 = open('aaa.txt',mode='r+',encoding='utf-8')
msg=f1.read()
f1.write('哈哈哈')
f1.flush()
f1.close()print(msg)#错误的读取内容, 写在文件开头, 并且只读取之后的内容
f1 = open('aaa.txt',mode='r+',encoding='utf-8')
f1.write('bbb')
msg=f1.read()
f1.flush()
f1.close()print(msg)
写读模式
先将所有的内容清空,然后写入.最后读取.但是读取的内容是空的,不常用
f1 = open('bbb.txt',mode='w+',encoding='utf-8')
f1.write('bbb')
msg=f1.read()
f1.flush()
f1.close()print(msg)
追加读(a+,a+b)
a+模式下,不论是先读还是后读,都是读不到数据的
f = open('ccc.txt',mode='a+',encoding='utf-8')
f.write('ccc')
f.flush()
msg=f.read()
f.close()print(msg)
文件的相关操作
read()
read()是将文件中所有的内容都读取
f = open('aaa.txt',mode='r',encoding='utf-8')
msg=f.read()
f.close()print(msg)
read()可以指定我们想要读取的内容数量
f = open('aaa.txt',mode='r',encoding='utf-8')
msg= f.read(3) #读取三个字符
msg1 = f.read() #后边在读就会继续向后读取
f.close()print(msg)print(msg1)
如果使用rb模式读取出来的就是字节
f = open('bbb.txt',mode='rb')
msg= f.read(3)
msg1=f.read()
f.close()print(msg)print(msg1)
read()的弊端就是当文件很大的时候,将文件中的内容全部读取,存放在内存中这样会导致内存奔溃
readline()
readline()读取每次只读取一行,注意点:readline()读取出来的数据在后面都有一个\n
f = open('aaa.txt',mode='r',encoding='utf-8')
msg1=f.readline()
msg2=f.readline()
msg3=f.readline()
msg4=f.readline()
f.close()print(msg1)print(msg2)print(msg3)print(msg4
readlines()
readlines() 将每一行形成一个元素,放到一个列表中,将所有的内容全部读出来,如果文件很大,占内存,容易崩盘。
f = open('log',encoding='utf-8')print(f.readlines())
f.close()
如果有个较大的文件我们进行读取不推荐使用以下方法:
f = open('aaa',mode='r',encoding='utf-8')print(f.read()) #这样就是将文件一次性全部读取到内存中,内存容易奔溃
推荐使用的是这种方法:
f = open('aaa',mode='r',encoding='utf-8')for line inf:print(line) #这种方式就是在一行一行的进行读取,它就执行了下边的功能
print(f.readline())print(f.readline())print(f.readline())print(f.readline())
f.close()
注意:读完的文件句柄一定要关闭
seek()
seek(n)光标移动到n位置,注意: 移动单位是byte,所有如果是utf-8的中文部分要是3的倍数
通常我们使用seek都是移动到开头或者结尾
移动到开头:seek(0,0) 可以看做成seek(0)
seek(6)这种如果是单数并且不是0的就是按照字节来移动光标
移动到结尾:seek(0,2) seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾
f = open("aaa", mode="r+", encoding="utf-8")
f.seek(0)#光标移动到开头
content = f.read() #读取内容, 此时光标移动到结尾
print(content)
f.seek(0)#再次将光标移动到开头
f.seek(0, 2) #将光标移动到结尾
content2 = f.read() #读取内容. 什么都没有
print(content2)
f.seek(0)#移动到开头
f.write("张国荣") #写入信息. 此时光标在9 中文3 * 3个 = 9
f.flush()
f.close()
tell()
tell()
使用tell()可以帮我们获取当前光标在什么位置
f = open("aaa", mode="r+", encoding="utf-8")
f.seek(0)#光标移动到开头
content = f.read() #读取内容, 此时光标移动到结尾
print(content)
f.seek(0)#再次将光标移动到开头
f.seek(0, 2) #将光标移动到结尾
content2 = f.read() #读取内容. 什么都没有
print(content2)
f.seek(0)#移动到开头
f.write("张国荣") #写入信息. 此时光标在9 中⽂文3 * 3个 = 9
print(f.tell()) #光标位置9
f.flush()
f.close()
修改文件
文件修改: 只能将文件中的内容读取到内存中, 将信息修改完毕, 然后将源文件删除, 将新文件的名字改成老文件的名字.
importos
with open("aaa", mode="r", encoding="utf-8") as f1,\
open("aaa_new", mode="w", encoding="UTF-8") as f2:
content=f1.read()
new_content= content.replace("冰糖葫芦", "⼤白梨")
f2.write(new_content)
os.remove("aaa") #删除源文件
os.rename("aaa_new", "aaa") #重命名新文件
弊端: ⼀次将所有内容进行读取. 内存溢出. 解决方案: 一行一行的读取和操作
importos
with open("aaa", mode="r", encoding="utf-8") as f1,\
open("aaa_new", mode="w", encoding="UTF-8") as f2:for line inf1:
new_line= line.replace("大白梨", "冰糖葫芦")
f2.write(new_line)
os.remove("aaa") #删除源⽂文件
os.rename("aaa_new", "aaa") #重命名新文件
python文件操作的一般步骤_Python基础之文件操作相关推荐
- python怎么设置颜色深浅变化_python基础之数据类型操作补充,集合及其操作,深浅拷贝...
内容概要: 数据类型操作补充 集合及其操作 深浅拷贝 1.基础数据类型补充 1.1字符串的操作补充 li = ["李嘉诚", "麻花藤", "黄海峰& ...
- [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- python文件替换一行_python基础_文件操作实现全文或单行替换的方法
这篇文章主要介绍了关于python基础_文件操作实现全文或单行替换的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 python修改文件时,使用w模式会将原本的文件清空/覆盖.可以 ...
- python中的打开文件的用法_python基础之文件操作
文件操作 一 介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周 ...
- python文件操作函数_python基础之文件操作,集合,函数
文件操作: 打开文件的方法: 第一种:打开文件执行完命令后,需要关闭文件,否则会一直占用内存空间 f=open('/data/1.txt','r+') #后面的r+ 表示打开文件的模式是读写 #命令 ...
- python os读取文件内容_python基础之文件读写
python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...
- python读取txt文件如何按数字分隔_python 读txt文件,按‘,’分割每行数据操作
按行读取TXT文件 fname = './新建文件夹/yob2010.txt' //文件夹路径 with open(fname,'r+',encoding='utf-8') as f: for lin ...
- python判断字符串在元祖_Python基础(2)——字典、元祖、字符串方法、非空即真、文件...
目录: 一.字典 二.元祖 三.字符串方法.切片 四.非空即真,非0即真 五.文件 正文 一.字典 字典 d = { 'username':'xiaohei', 'id':1, 'grand':'天马 ...
- 电大计算机应用基础win7操作,新版电大《计算机应用基础》(win7)操作题解题步骤.doc...
新版电大<计算机应用基础>(win7)操作题解题步骤.doc 天天快乐一Windows7部分1.将"Internet Explorer"图标锁定到任务栏.单击" ...
最新文章
- how-to-get-a-job-in-deep-learning
- android4.0 SystemUi系统状态栏
- 从考研说起:大学、职场、个人选择
- adb(4)-应用管理
- C++为什么使用指针---堆和栈的区别
- discuz forums.inc.php,【Discuz】积分机制实现解析
- 浓缩摘要_浓缩咖啡的收益递减
- 【292天】跃迁之路——程序员高效学习方法论探索系列(实验阶段50-2017.11.24)...
- (数据库系统概论|王珊)第四章数据库安全性-第一节:数据库安全性概述
- KMP算法详解P3375 【模板】KMP字符串匹配题解
- 2019武汉大学计算机学院拟录取,武汉大学2019年招收攻读硕士研究生复试成绩拟录取名单...
- 对java并发性的理解,【图片】你了解过Java并发编程:性能、扩展性和响应的高端操作吗?【java吧】_百度贴吧...
- dell R740secure boot_凯诺 10月11日 DELL 电脑报价
- 移动网优大神VoLTE学习笔记(四):主叫信令流程
- Python暂停的几种方法
- 苹果cms双端模板安装设置教程
- 灾难-NAS服务器用的西数红盘报警处理
- 为什么说学习编程有助于提升专注力?
- 清华大学地学系全球超分3弧秒海陆DEM数据下载
- 精益生产现场管理与现场改善的方法和工具
热门文章
- javascript闭包,你大爷永远是你大爷
- Android 颜色渲染(二) 颜色区域划分原理与实现思路
- tensorflow入门之损失函数
- Java 多态、抽象类 笔记
- 详解公用表表达式(CTE)
- 简单理解AOP(面向切面编程)
- 中文条件jsp mysql_jsp MySQL中的一些中文问题的解决
- 序数是什么意思_序数与基数
- python3迭代器和可迭代对象_一文读懂 Python3 可迭代对象、迭代器、生成器区别...
- 恐龙跳一跳游戏python_python实现“跳跃的恐龙”这款游戏