文件处理1
文件定义:文件是操作系统为用户/应用程序提供的一种操作硬盘的抽象单位。
为何要用文件?
用户/应用程序对文件的读写操作会由操作系统转换成具体的硬件操作,所以用户/应用程序可以通过简单的读写文件来间接地控制复杂的硬盘的存取操作,实现将内存中的数据永久的保存到硬盘中。
如何用文件?(f=open(r'C:\Users\Administrator\Desktop\fgds.txt'),f=open(r'fgd.txt',)
f=open(...) #打开文件,拿到一个文件对象f,f就相当于一个遥控器,可以向操作系统发送指令
f.read() # 读写文件,向操作系统发送读写文件指令
f.close() # 关闭文件,回收操作系统的资源
以上括号内open执行两个路径前者叫绝对路径,一般都是以绝对路径来打开文件,其中r',即raw,叫转义符号,是说路径中包含有\n\t\a等字符时,在文件路径前加上它,表示这个该路径只是一个普通地址,不需识别成其他意思。后者叫做相对路径,这种写法,必须是被查找的文件与执行文件夹在一个文件夹下。其实open打开一个文件,是向操作系统发送请求,要求操作系统打开文件。f类似于一个遥控器,f的值是一个文件对象,这个文件对象占的是应用程序的空间。
f=open(r'c:\Users\A dministrator\desktop\\fgd.txt',encoding='utf-8')
open :打开文件,打开后指针在文件的开头位置。
encoding 指定文件在打开时以utf-8的编码格式打开,如果不写则报错,因为Windows操作系统默认的是‘gbk’格式,这就导致存取的格式不一样,utf-8是以3个字节来断句的,gbk是以2个字节来断句的,所以存用utf-8,取的话必须用encoding指定utf-9格式取出,不然也会出现乱码。
f.read 是对打开的文件进行读操作,而且是一次性读完,读完指针跳到读的内容的末尾;
f.close 向操作系统发请求,要求操作系统关闭打开的文件。谨记:在应用程序结束之前,一定要先关闭文件,如果不关闭,该文件会占用系统资源,随着文件打开的越来越多,导致操作系统越来越慢。
上下文管理with:
with open(r'drt.txt',encoding='utf-8')as f,\
open(r'b.txt',encoding='utf-8') ad f1:
print(f.read())
print(f.read())
在我们打开完要运行的文件中子代码块以后,with会自动帮我们调用 f.close,f1.close,关闭文件回收系统资源。
二、文件的打开模式
r只读模式(不写的话,默认只读),w只写模式,a只追加写模式。
控制读写文件单位的方式(必须与r\w\a连用)
t : 文本模式(默认的),一定要指定encoding参数
优点: 操作系统会将硬盘中二进制数字解码成unicode然后返回给用户,只针对文本文件有效。
b: 二进制模式,读取时直接以utf-8的格式显示出来,不需要任何转换,而且不需要或者说不能指定encoding参数,可以
读取文本文件,视频文件,音频文件。
上图说明了以二进制读取文本内容,是以二进制的方式直接读取出来,不需指定encoding参数,将读取的二进制字节转换成文字时,编码是utf-8格式,解码也需utf-8格式。
1.只读模式:
当文件不存在时,f.read运行会报错。文件存在时,文件指针指向文件的开头。
with open(r'drt.txt',mode='r' ,encoding='utf-8')as f:
res1= f.read() 一次将文件中内容全部读完,这时可以看出f.read的缺点是,当读取的文件过大时,其占用内存过大,会导致内存运行缓慢至崩溃。
res2=f.read() 在打开文件时,上面的read将文件一次读完,指针移动到文件末尾,没有内容可以读,此事不报错,返回值为none。
f.readlines()也是一次性将文件中内容读到内存当中,类似f.read。返回值是一个列表。
f.readable 返回值为True
f.writable 返回值是False
f.readline 一次只从硬盘中读取一行,这种读取方式可以避免文件过大导致内存不足的缺点
f.readline 多加一个 f.readline就多向内存中多读一行
print(res1)
print(res2)
我们可以用readline将文件中内容单行读到内存,其实这里我们也可以用另外一种方式for循环将其一行一行的读到内存中,建立一个空列表还可以将这些内容一一添加到列表中去,打印出来可以看到其实文件中的文本每行都有一个换行符\n。
2、文件的只写模式(w):
1)、当文件不存在时,打印时会自动创建一个新的文档
2)、当文件存在时,会先清空文档中内容,文件指针跑到文件的开头。
with open(r'drt.txt',mode='wt' ,encoding='utf-8')as f:
print(readable()) 返回False
print(writable()) 返回true
print(read) 会报错
print(write()) 括号内指定写要存到文档的内容,即write(‘收到回复单双皆可n\’),你\n代表换行符,让文档中内容换行,以指定的utf-8格式的二进制存到硬盘。
with open(r'drt.txt',mode='wb' ,encoding='utf-8')as f:
以b模式写的字符,b模式不给转换,需要自己转,不然打印时会报错。应该是f.write(‘哈哈哈\n’.encode('uft-8')),然后在打开文本才会以相同的字符出现。
f.writelines() 一次将已有的内容添加到文档中去,也可以用for循环加f.write,一次将内容加到文档中。
info=["'name':'zhang\n'","'age':17\n","'sex':'male\n'"]
with open(r'fgd.txt',mode='w',encoding='utf-8') as f:
for line in info:
f.write(line)
#f.writelines(info)
3.只追加模式(a)
1)当文件不存在时,新建一个空文档,文件指针跑到文件末尾
2)当文件存在时,文件指针跑到文件的末尾
with open (r'fgd.txt',mpde='a',encoding='uft-8') as f: