详解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 相关文章推荐
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
Python编程中归并排序算法的实现步骤详解
May 04 Python
浅谈python内置变量-reversed(seq)
Jun 21 Python
python 定义n个变量方法 (变量声明自动化)
Nov 10 Python
Python实现计算字符串中出现次数最多的字符示例
Jan 21 Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
Apr 22 Python
Python使用Numpy模块读取文件并绘制图片
May 13 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
Nov 30 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/11/25 PHP
php操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
PHP函数in_array()使用详解
2014/08/20 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
jQuery中的常用事件总结
2009/12/27 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
python调用java的jar包方法
2018/12/15 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
领导班子作风建设剖析材料
2014/10/11 职场文书
服务整改报告
2014/11/06 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
MySQL sql_mode的使用详解
2021/05/08 MySQL
Mysql 设置boolean类型的操作
2021/06/04 MySQL
java Nio使用NioSocket客户端与服务端交互实现方式
2021/06/15 Java/Android