文件:存储在某种长期存储设备上的数据!!包括(硬板 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 本来是存在的 ,我对他做了写操作

python C盘写入文件失败 python写入磁盘文件_python C盘写入文件失败

 

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

python C盘写入文件失败 python写入磁盘文件_开发语言_02

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

python C盘写入文件失败 python写入磁盘文件_python C盘写入文件失败_03

 

 

文本和字节之间的转化

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 中的 b8个0 或者1 作为一个字节在ANSI 编码方式下 一个英文(包括英文特殊符号)占用一个字节 、 中文(包含中文特殊字符号) 占用2 个字节 在 unicode 编码方式下 一个英文和中文 或者英文特殊符号和中文特殊符号 占用2个字节 在utf-8 编码格式下 一个英文符号占用一个字节, 中文占用3个字节