详解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类参数self使用示例
Feb 17 Python
python的即时标记项目练习笔记
Sep 18 Python
python通过线程实现定时器timer的方法
Mar 16 Python
基于python中的TCP及UDP(详解)
Nov 06 Python
python 处理string到hex脚本的方法
Oct 26 Python
python使用for循环计算0-100的整数的和方法
Feb 01 Python
django-初始配置(纯手写)详解
Jul 30 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
Feb 12 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
python安装后的目录在哪里
Jun 21 Python
Python如何合并多个字典或映射
Jul 24 Python
python实现层次聚类的方法
Nov 01 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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
详解JS函数重载
2014/12/04 Javascript
JavaScript中的console.time()函数详细介绍
2014/12/29 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
利用python将图片转换成excel文档格式
2017/12/30 Python
python sort、sort_index方法代码实例
2019/03/28 Python
Python中turtle库的使用实例
2019/09/09 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
行政助理岗位职责范文
2013/12/03 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
2015年119消防宣传日活动总结
2015/03/24 职场文书
民间借贷被告代理词
2015/05/23 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android