当前位置: 首页 > article >正文

Python 高级编程(文件操作)

文件:存储在某种长期存储设备上的数据!!包括(硬板 u 盘 移动硬盘 光盘)
计算机中临时的数据: 存储在内存中,一旦操作结束,内存中的空间就会被释放

文件(特指普通文本)的基本操作包括:

1.打开文件
2.读写文件
   读文件: 将文件中的内容存储在内存中
   写文件: 将内存的数据写入文件中  文件存储的位置是磁盘 磁盘是长期存储数据 内存是短期存储 当你的程序运行完成后内存中的内容就会被释放
3.关闭文件
在python中操作文件通常使用4个函数(函数)
  1.open 打开文件 返回文件操作的对象
  2.read 读取文件,将文件中的内容读取到内存中
  3.write 写文件 将指定的内容写入到磁盘中
  4.close 关闭文件
文件指针 -- 光标
标记了从哪个位置开始读取数据
首次打开文件的时候,并没有指定它的模式,文件指针指向文本的开始位置

下面这些操作只是针对文本文件就是  .txt 格式

1. 打开文件:

str = open(r'D:\500px\test\test1.txt','r')

 2.读取文件

str2 = str.read()
print(str2)

3.关闭文件

 str.close

完整项目 

#根据文件读写案例,进行文件复制
f = open('makdir.txt','r') #打开文件而且是只读模式
f2 = open('new_file_copy','w') #打开文件而且只是写入模式
content = f.read()  #读取makdir.txt 文件中的内容
f2.write(content) #将从makdir.txt文件中读取到的内容写入new_file_copy  文件中
f.close() #关闭makdir.txt
f2.close() #关闭new_file_copy

上面是一些小的文本内容,如果是一些比较大的文件,我们在读取的时候用到 readlines,逐行读,逐行写,而不是简单的一次性读完写入

# 大文件操作 对于大文件我进行的是逐行的读写操作
f3 = open('makdir.txt','r')
f4 = open('big_file.txt','w')
while  True:  #  这是一个死循环只能使用break 方可跳出循环
    content = f3.readline() # 逐行读取文件
    if not content:   # 如果 content 为空
        break         #跳出 while 循环
    f4.write(content) # 否则将content写入新的f3中
f3.close()
f4.close()

读写bytes类型数据(在计算机的底层都是以二进制的形式存储文件内容) 

因为视频图片的存储形式都是bytes 流

#rb wb ab 是对字节的操作
rb : 以二进制 (字节) 的格式打开一个文件用于只读,文件指针放在开头,如果文件不存在则会抛出异常
wb : 打开一个文件用于写入二进制(字节) ,如果该文件已经存在,会先清空或者覆盖 然后将文件放在文件开头,如果不存在,就会创建该文件
ab :对一个文件用于二进制的形式进行追加,如果该文件存在,文件指针则会指向原来文本内容的末尾

以下只针对二进制数据 

1.读模式

f1 = open(r'C:\Users\HP\Desktop\爬虫.png','rb')

2.写模式

f1 = open(r'C:\Users\HP\Desktop\爬虫1.png','wb')

 3.追加模式

f1 = open(r'C:\Users\HP\Desktop\爬虫1.png','ab')

需要注意的是,在写入模式下,如果文件存在则会清空文件中的内容,如果不存在则会创建一个文件。

f1 = open(r'C:\Users\HP\Desktop\爬虫1.png','wb')  #打开文件 写模式
f2 = open(r"C:\Users\HP\Desktop\python\test.jpg",'rb') #打开文件 读模式
content = f2.read() #读取test.jpg 中的字节流
f1.write(content) #将从test.jpg 中读取到的字节流写入到爬虫1.png中
f1.close()
f2.close()
print('写入完成') # 提示操作完成

 

爬虫1.png 本来是存在的 ,我对他做了写操作

 

 经过 将test.jpg  字节流写入到 爬虫1.png 后 照片发生了变化,这恰好证实了,如果存在这么一个照片则会删除它,从开头写入图片的字节流

我这里说的字节流是指图片在磁盘中中的保存形式 ,每一张图片是由若干个以b开头的字节来表示我对图片文件做读写操作,其实就是对这一些byte数据做读写 比如: 

 

 

文本和字节之间的转化

encode 编码 将字符串转换成 字节

decode 解码 将字节转换成 字符串

f = open('./python进阶/mydata.text','r')
content = f.read().encode() #我对读到的str做了编码转换成了字节
#对它进行读取,才能进行转码操作
print(content)
print(type(content))
f_f = content.decode() #我将转换的字节有通过解码还原回了str
    # .encode('utf-8')
print(f_f)
print(type(f_f))

 谨记:

r   rb

w  wb

a   ab

统一来说,r和rb都是读取模式,如果文件不存在则会抛出错误,

w 和 wb 都是写入模式,如果文件存在,则会清空,文件内原有的内容,如果不存在,则会创建一个新的文件

a 和 ab都是追加模式,如果文件存在,文件的指针则会指向原始文件中内容的末尾,你新追加的内容的开头则会接续原文件内容的末尾,如果文件不存在,则会创建一个新的文件、

加 b 和 不加 b 的原因是 加了b(rb,wb....),是用来存储文件形式是bytes(比如图片 视频 音频),不加b(r,b..)是用于处理文本内容的 

 关于字节 和二进制的关系,我想赘叙几点:

一个字节(bytes ) = 8 个二进制 (bit) 字节就是 kb 中的 b
8个0 或者1 作为一个字节
在ANSI 编码方式下 一个英文(包括英文特殊符号)占用一个字节 、 中文(包含中文特殊字符号) 占用2 个字节
在 unicode 编码方式下 一个英文和中文 或者英文特殊符号和中文特殊符号 占用2个字节
在utf-8 编码格式下 一个英文符号占用一个字节, 中文占用3个字节

http://www.kler.cn/a/6349.html

相关文章:

  • 写作词汇积累:见笑、尽显、稀疏、染指
  • 实现 QTreeWidget 中子节点勾选状态的递归更新功能只影响跟节点的状态父节点状态不受影响
  • 领克Z20结合AI技术,革新自动驾驶辅助系统
  • 在 Java 项目中集成和使用 dl4j 实现通过扫描图片识别快递单信息
  • asp.net core webapi项目中 在生产环境中 进不去swagger
  • clickhouse复现修复 结构需要清理 错误 structure need clean
  • TCP / IP 模型
  • AtCoder Beginner Contest 296 (A~D)
  • 虚拟机与主机互传文件
  • 【C++】哈希
  • C++初阶—string类(1)
  • web前端面试题之webpack和其他
  • spring七种事务传递机制及其原理
  • 会C#如何学习Python的几个关键点
  • pytorch安装和测试
  • MyBatis
  • 注册谷歌账户教程--解决注册谷歌账户“此电话号码无法用于进行验证”问题--亲测已解决--谷歌账户注册全流程
  • 【面试】Java并发编程面试题
  • XGBoost的简单安装及入门使用
  • Kubuntu(Ubuntu) 22.04安装OBS Studio
  • 简述线程安全问题的原因和解决方案
  • Day913.反向代理和网关是什么关系 -SpringBoot与K8s云原生微服务实践
  • 现在的年轻人真会玩,开发界面都这么时尚,不服老都不行了
  • 第16章_变量、流程控制与游标
  • 记一次weblogic反序列化到内网域控上线
  • 深度探索c++对象模型-31-RTTI与存储位置简介