详解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正则分组的应用
Nov 10 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
python实现三维拟合的方法
Dec 29 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
Feb 13 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
Python日志无延迟实时写入的示例
Jul 11 Python
Django Admin中增加导出Excel功能过程解析
Sep 04 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
实例讲解Python 迭代器与生成器
Jul 08 Python
运行Python编写的程序方法实例
Oct 21 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 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中,文件上传
2006/12/06 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
javascript操作excel生成报表全攻略
2014/05/04 Javascript
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
jQuery实现菜单栏导航效果
2017/08/15 jQuery
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
jquery.pagination.js分页使用教程
2018/10/23 jQuery
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
深入理解javascript中的this
2021/02/08 Javascript
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
python 随机数生成的代码的详细分析
2011/05/15 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
python读取与处理netcdf数据方式
2020/02/14 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
Python 中如何写注释
2020/08/28 Python
通过实例解析python and和or使用方法
2020/11/14 Python
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
大学四年规划书范文
2013/12/27 职场文书
个人委托书范本
2014/04/02 职场文书
公司委托书范本
2014/04/04 职场文书
小学二年级评语
2014/04/21 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
人生遥控器观后感
2015/06/11 职场文书
教师节获奖感言
2015/07/31 职场文书
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android