详解Python中的文件操作


Posted in Python onJanuary 14, 2021

一:文件的打开模式

了解过字符编码都知道,文件都是以某一种标准编码成二进制存在硬盘里的,在文件的默认打开模式下f = open('a.txt','rt',encoding='utf-8') 其中的t表示是以文本模式打开文件,在应用程序给操作系统发送数据请求后,操作系统在硬盘读取二进制编码,然后返还给应用程序,通过open方法,将编码解码成我们看到的字符;如果是以b模式打开文件的话,open方法不会对操作系统返回的二进制数据作处理,而是直接打印。

f = open('a.txt','rt',encoding='utf-8')

其中的t表示是以文本模式打开文件,在应用程序给操作系统发送数据请求后,操作系统在硬盘读取二进制编码,然后返还给应用程序,通过open方法,将编码解码成我们看到的字符,那么在b模式下打开文件,操作系统返还直接是一串二进制数字

文件的三种打开方式:

只读模式:‘r'

只写方式:'w'

追加模式:'a'

以字节模式打开文件的话,需要注意:

一定要写上‘b',只能以rb,wb,ab这种形式打开文件,不能省略‘b'。

f = open('a.txt','rb')  
f = open('a.txt','wb') 
f = open('a.txt','ab') 
#错误写法
f = open('a.txt','r') #未注明以b模式打开,这种写法是默认文本模式打开 
f = open('a.txt','rb',encode = 'utf-8') #b模式打开,不能传入编码方式

字节模式下读写都是以bytes为单位的。如果想写入字符,需要编码后以字节类型写入

f = open('a.txt','wb')
f.write('你哈'.encode('utf-8'))

注意:对于非文本文件,我们只能使用字节模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)

二:字节模式下的操作

字节模式打开非文本文件

with open('1.jpg', 'rb') as f: # 以只读模式打开文件
  data = f.read()       # 读取文件全部内容,并赋值给变量data
print(data)           # 打印变量,我们得到是b'\xff\xd8\xff\xe0\x00这种形式的结果
print(type(data))        # 变量的类型<class 'bytes'>

with open('1.jpg','rb') as f:
    data = f.read()
print(type(data))
print(data.decode('utf-8'))   #将读取的编码以utf-8标准解码
                 #图片文件编码方式不是utf-8,所以不能解码,程序报错

以字节模式打开文本文件:

with open('db.txt', 'rb') as f: 
  data = f.read()
print(data)         # 打印出来的是一串二进制数
print(data.decode('utf-8')) # 把二进制数用utf-8标准解码
print(type(data))      # 可以在屏幕上显示人类能看懂的字符了

with open('db.txt', 'wb') as f:
  f.write('你好啊\n'.encode('utf -8'))

在以字节打开文件时,文件的操作都要基于二进制进行了.

三:文件的修改

文件的修改并不是我们直观感受上的擦除重新写上,基于硬盘的特性,任何文件的修改操作都是新内容对原内容的覆盖。修改的概念存在于内存中,当应用程序启动,请求操作系统从硬盘中读取数据,读取的数据运行在内存上,这时,我们在应用程序上的操作修改类内存上的数据内容,但是并不影响到硬盘的数据。当我们点击保存时,新的数据会将原数据覆盖。这时,才完成了文件的修改。

修改文件方式一:

1:先把文件内容全部读取

2:在内存中修改

3:把修改好的内容覆盖写入到硬盘上

with open("db.txt", "r", encoding="utf-8") as f:  # 打开文件
  data = f.read()                # 读取文件全部内容
  data = data.replace("你好啊:", "======")    # 修改文件内容
  
with open("db.txt", "w", encoding="utf-8") as f:  # 以‘w'模式打开,清空文件
  f.write(data)                 # 把修改后的数据写入

修改文件方式二:

1:以读的方式打开源文件

2:以写的方式打开一个新文件

import os # 引入os模块

with open('a.txt', 'r', encoding='utf-8') as read_f, \
    open('new.txt', 'w', encoding='utf-8') as new_f: # 同时打开文件
  for line in read_f:                  # 循环原文件内容
    if '你好啊' in line:
      line = line.replace('你好啊', '哈哈哈哈哈哈') # 替换源文件内容
    new_f.write(line)                # 把原文件循环出来的内容写入到新文件中,
    
os.remove('a.txt')                   # 调用OS模块功能删除原文件
os.rename('new.txt', 'a.txt')              # 重命名新文件

以上就是详解Python中的文件操作的详细内容,更多关于python 文件操作的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python 常用的安装Module方式汇总
May 06 Python
python+selenium实现登录账户后自动点击的示例
Dec 22 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
Python正则表达式和元字符详解
Nov 29 Python
Appium+Python自动化测试之运行App程序示例
Jan 23 Python
浅谈python之高阶函数和匿名函数
Mar 21 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
Jun 23 Python
python中pathlib模块的基本用法与总结
Aug 17 Python
pandas 操作 Excel操作总结
Mar 31 Python
Python安装使用Scrapy框架
Apr 12 Python
python中的时区问题
Jan 14 #Python
Python截图并保存的具体实例
Jan 14 #Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 #Python
DRF使用simple JWT身份验证的实现
Jan 14 #Python
如何用Python提取10000份log中的产品信息
Jan 14 #Python
python自动生成证件号的方法示例
Jan 14 #Python
用python批量移动文件
Jan 14 #Python
You might like
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
php使用curl代理实现抓取数据的方法
2017/02/03 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
JavaScript 拖拉缩放效果
2008/12/10 Javascript
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
jquery $.each() 使用小探
2013/08/23 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
浅析python的优势和不足之处
2018/11/20 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
什么是makefile? 如何编写makefile?
2012/08/08 面试题
2013年大学生的自我鉴定
2013/10/24 职场文书
保护环境倡议书范文
2014/05/13 职场文书
商务经理岗位职责
2014/08/03 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书
大学推普周活动总结
2015/05/07 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
《鲸》教学反思
2016/02/23 职场文书