详解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中mechanize库的简单使用示例
Jan 10 Python
部署Python的框架下的web app的详细教程
Apr 30 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
Pandas之Dropna滤除缺失数据的实现方法
Jun 25 Python
python内存动态分配过程详解
Jul 15 Python
python安装virtualenv虚拟环境步骤图文详解
Sep 18 Python
Anaconda和ipython环境适配的实现
Apr 22 Python
Python创建临时文件和文件夹
Aug 05 Python
Pycharm安装第三方库失败解决方案
Nov 17 Python
python 窃取摄像头照片的实现示例
Jan 08 Python
Python如何telnet到网络设备
Feb 18 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 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 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP 判断常量,变量和函数是否存在
2009/04/26 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
js通过classname来获取元素的方法
2016/11/24 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
python异步任务队列示例
2014/04/01 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
Python递归实现汉诺塔算法示例
2018/03/19 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
Python处理中文标点符号大集合
2018/05/14 Python
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
销售总经理岗位职责
2014/03/15 职场文书
元旦联欢会主持词
2014/03/26 职场文书
中级会计大学生职业生涯规划书
2014/09/16 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
2015年招生工作总结
2015/05/04 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs
MongoDB支持的索引类型
2022/04/11 MongoDB
nginx配置之并发频次限制
2022/04/18 Servers