​ 应用程序运行过程中产生的数据最先都是存放于内存中的,若想永久保存下来,必须要保存于硬盘中。应用程序若想操作硬件必须通过操作系统,而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念,用户或应用程序对文件的操作,就是向操作系统发起调用,然后由操作系统完成对硬盘的具体操作。

文件操作的基本流程

#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基础之文件操作相关推荐

  1. python怎么设置颜色深浅变化_python基础之数据类型操作补充,集合及其操作,深浅拷贝...

    内容概要: 数据类型操作补充 集合及其操作 深浅拷贝 1.基础数据类型补充 1.1字符串的操作补充 li = ["李嘉诚", "麻花藤", "黄海峰& ...

  2. [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  3. python文件替换一行_python基础_文件操作实现全文或单行替换的方法

    这篇文章主要介绍了关于python基础_文件操作实现全文或单行替换的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 python修改文件时,使用w模式会将原本的文件清空/覆盖.可以 ...

  4. python中的打开文件的用法_python基础之文件操作

    文件操作 一 介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周 ...

  5. python文件操作函数_python基础之文件操作,集合,函数

    文件操作: 打开文件的方法: 第一种:打开文件执行完命令后,需要关闭文件,否则会一直占用内存空间 f=open('/data/1.txt','r+') #后面的r+ 表示打开文件的模式是读写 #命令 ...

  6. python os读取文件内容_python基础之文件读写

    python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...

  7. python读取txt文件如何按数字分隔_python 读txt文件,按‘,’分割每行数据操作

    按行读取TXT文件 fname = './新建文件夹/yob2010.txt' //文件夹路径 with open(fname,'r+',encoding='utf-8') as f: for lin ...

  8. python判断字符串在元祖_Python基础(2)——字典、元祖、字符串方法、非空即真、文件...

    目录: 一.字典 二.元祖 三.字符串方法.切片 四.非空即真,非0即真 五.文件 正文 一.字典 字典 d = { 'username':'xiaohei', 'id':1, 'grand':'天马 ...

  9. 电大计算机应用基础win7操作,新版电大《计算机应用基础》(win7)操作题解题步骤.doc...

    新版电大<计算机应用基础>(win7)操作题解题步骤.doc 天天快乐一Windows7部分1.将"Internet Explorer"图标锁定到任务栏.单击" ...

最新文章

  1. how-to-get-a-job-in-deep-learning
  2. android4.0 SystemUi系统状态栏
  3. 从考研说起:大学、职场、个人选择
  4. adb(4)-应用管理
  5. C++为什么使用指针---堆和栈的区别
  6. discuz forums.inc.php,【Discuz】积分机制实现解析
  7. 浓缩摘要_浓缩咖啡的收益递减
  8. 【292天】跃迁之路——程序员高效学习方法论探索系列(实验阶段50-2017.11.24)...
  9. (数据库系统概论|王珊)第四章数据库安全性-第一节:数据库安全性概述
  10. KMP算法详解P3375 【模板】KMP字符串匹配题解
  11. 2019武汉大学计算机学院拟录取,武汉大学2019年招收攻读硕士研究生复试成绩拟录取名单...
  12. 对java并发性的理解,【图片】你了解过Java并发编程:性能、扩展性和响应的高端操作吗?【java吧】_百度贴吧...
  13. dell R740secure boot_凯诺 10月11日 DELL 电脑报价
  14. 移动网优大神VoLTE学习笔记(四):主叫信令流程
  15. Python暂停的几种方法
  16. 苹果cms双端模板安装设置教程
  17. 灾难-NAS服务器用的西数红盘报警处理
  18. 为什么说学习编程有助于提升专注力?
  19. 清华大学地学系全球超分3弧秒海陆DEM数据下载
  20. 精益生产现场管理与现场改善的方法和工具

热门文章

  1. javascript闭包,你大爷永远是你大爷
  2. Android 颜色渲染(二) 颜色区域划分原理与实现思路
  3. tensorflow入门之损失函数
  4. Java 多态、抽象类 笔记
  5. 详解公用表表达式(CTE)
  6. 简单理解AOP(面向切面编程)
  7. 中文条件jsp mysql_jsp MySQL中的一些中文问题的解决
  8. 序数是什么意思_序数与基数
  9. python3迭代器和可迭代对象_一文读懂 Python3 可迭代对象、迭代器、生成器区别...
  10. 恐龙跳一跳游戏python_python实现“跳跃的恐龙”这款游戏