你好,我是goldsunC
让我们一起进步吧!
1. 文件说明
文件是存储在存储器上的数据序列,在计算机中,所有文件都是以二进制的方式进行存储的,而文件的展示形式一般分为两种:文本形式和二进制形式。文本文件
由单一特定编码组成的文件,如utf-8
编码。二进制文件
直接由比特0和1组成的文件,没有统一字符编码。在二进制文件中,0和1一般根据==预定义==的格式进行了结构组织,这种结构也就是文件的格式,结构的不同也就代表了文件格式的不同。例如.png
,.avi
等文件。无论是文本文件还是二进制文件,在计算机中都是以二进制方式进行存储的,而有统一编码的我们称其为文本文件,没有统一编码的我们称其为二进制文件。不过对于任何类型的文件,我们都可以用二进制的方法进行打开。2. 文件处理的一般步骤
当我们拿到一个文件时,处理步骤一般分为三步:- 1.打开
- 2.操作
- 3.关闭
# 以文本形式打开文件
>>> tfile = open("file.txt","rt")
# 以二进制形式打开文件
>>> bfile = open("file.txt","rb")
# 关闭文件
>>> tfile.close()
>>> bfile.close()
可以看到,在文件的两种状态(存储状态和打开状态)之间,通过两个函数open(,)
和close()
来进行转换,对open
函数来讲,示例中的两个参数第一个代表文件的路径和名称,当省去路径时必须保证文件和脚本在同一目录下,第二个参数决定了你对文件打开的方式,如rt
代表以只读的文本形式打开,rb
代表以只读的二进制形式打开,这在后文中将会有详细介绍。文件的打开
如上文所讲,文件的打开只需要用到open(,)
函数,下面给出这个函数的用法。格式如下:
= open( 文件路径及名称 , 打开模式 )
句柄名称即是后续对文件处理的对象,而文件路径及名称上文以及提过,而打开模式跟我们后续处理文件的方法息息相关,简单来说我们想怎么处理文件最好选择相应的打开方法。Python提供了七种相关的打开模式,分别如下:打开模式 | 作用 |
---|---|
'r' | 只读 模式,程序的默认值,如果文件不存在,返回FileNotFoundError类型错误。 |
'w' | 覆盖写 模式,文件若不存在则自动创建一个文件,如果文件存在则将其覆盖。 |
'x' | 创建写 模式,文件若不存在则创建文件,如果文件存在将返回FileExistsError类型错误。 |
'a' | 追加写 模式,文件若不存在则创建文件,如果文件存在则将内容写入到原文件的后边。 |
'b' | 以二进制类型打开文件。 |
't' | 以文本类型打开文件,此为默认值。 |
'+' | 与r/w/x/a一同使用,在原功能基础上增加同时读写功能。 |
文件的关闭
文件的关闭非常简单,格式如下: . close()
文件内容的读取
在对文件内容进行读取时首先要保证文件以及被打开,而对于读取方法,Python提供了三个针对文件读取的函数:
读取方法 | 作用 |
---|---|
.read(size=-1) | 读入全部内容,如果给出参数,则读入前size长度 |
.readline(size=-1) | 读入一行内容,如果给出参数,则读入该行的前size长度 |
.readlines(hint=-1) | 读入文件的所有行,以每行为元素形成列表,如果给出参数,则读入前hint行 |
数据的文件写入
对文件内容的读取来讲,我们是将文件中的内容读取出来然后进行我们的操作,不影响原文件,而对文件内容的写入来讲,是我们之间在文件上进行操作,不过要注意对文件以写方式
打开。
Python也提供了三个针对文件写入的函数:
写入方法 | 作用 |
---|---|
.write(s) | 向文件写入一个字符串或者字节流 |
.writelines(lines) | 将一个元素全为字符串的列表写入文件 |
.seek(offset) | 改变当前文件操作指针的位置,offset 参数:0、1、2分别代表文件开头、当前位置、文件结尾。 |
seek
函数,它的作用是改变当前文件操作指针的位置,它的用处是什么呢?举个小例子: #首先以文本状态和覆盖写模式打开一个文件
>>> newfile = open('a_flie.txt','wb+')
#建立一个列表
>>> a_list = ['Keep calm',' and ','carry on',' !']
>>> newfile.writelines(a_list)
>>> for line in newfile:
print(line)
>>> newfile.close()
这段代码在运行之后会生成一个'a_file.txt'文件,里边写着'Keep calm and carry on !',
而在解释器中却并没有打印这个字符串,这是因为在文件写入完成后,指针位置在文件的最后方,
而'for in'的遍历方法是从指针位置向文件最后方遍历,因此遍历的结果是空,这个时候如果想要
使用遍历的方法打印写入的字符串,就需要用到'seek'函数,如下:
#首先以文本状态和覆盖写模式打开一个文件
• end •
走在路上
goldsunC