-
1 文件的使用
-
2 示例:文件的写-读...
文件的使用
文件是一个存储在辅助存储器(如硬盘等)上的数据集合,它可以包含任何数据内容。用文件形式组织和表达数据更为有效更为灵活。
文件包括两件类型:文本文件和二进制文件。 文本文件一般由单一特定编码的字符组成,如UTF-8编码,内容容易统一展示和阅读。文本文件可以看作为长字符串,例如.txt的文本文件。二进制文件没有统一的字符编码,文件内部数据的组织格式多样,例如,.png图像文件、.avi视频文件。二进制文件不能看作是字符串,只能当作字节流。
Python操作文件的步骤是统一的,即“打开-操作-关闭”。 文件默认处于存储状态,首先需要将其打开,才有权操作该文件。若该文件不存在,可以创建文件。在Python中文件的打开可以有7个,如表1:
表1 文件的打开模式
打开模式(mode) | 含义 |
'r' | 只读模式,如果文件不存在,返回异常FileNotFoundError,默认值 |
'w' | 覆盖写模式,文件不存在则创建,存在则完全覆盖源文件 |
'x' | 创建写模式,文件不存在则创建,存在则返回异常FileExistsError |
'a' | 追加写模式,文件不存在则创建,存在则在原文件最后追加内容 |
'b' | 二进制文件模式 |
't' | 文本文件模式,默认值 |
'+' | 与r/w/x/a一同使用,在原功能基础上增加同时读写功能 |
Python通过内置的open()函数打开一个文件,并实现文件与一个变量的关联,其格式如下:
<变量名> = open(<文件名>,<打开模式>)
文件名包括了文件的路径与具体文件名。例如“D:/pythonFiles/hqu.txt"表示D盘pythonFiles目录下的hqu.txt文件;"app.txt"表示当前目录下的文件app.txt
txtFile=open("D:/hqu.txt",'r') 或 txtFile=open("D:/hqu.txt") #表示以读的方式打开文件
txtFile=open("D:/hqu.txt",'w') #以写的方式打开,若文件存在,原内容将会被覆盖,若文件不存在则创建
txtFile=open("D:/hqu.txt",'a') #写方式,若文件存在,则是尾部添加,文件不存在则创建
binFile=open('music.mp3', 'rb') #读取一个音频文件,(二进制文件,如图片,视频,音频,需要使用文件打开模式'rb'。
文件通过读或写方式完成文件操作后,要关闭文件,其方法是:
<变量名>.close()
例如,txtFile.close(), binFile.close()
那么在占有文件期间(打开之后,关闭之前),是如何对文件进行读和写操作的呢?
1.文的读取
方法 | 含义 |
f.read(size=-1) | 从文件中读入整个文件内容。参数可选,如果给出,读入前size长度的字符串或字节流 |
f.readline(size = -1) | 从文件中读入一行内容。参数可选,如果给出,读入该行前size长度的字符串或字节流 |
f.readlines(hint=-1) | 从文件中读入所有行,以每行为元素形成一个列表。参数可选,如果给出,读入hint行 |
f.seek(offset) | 改变当前文件操作指针的位置,offset的值: 0:文件开头; 1:当前位置; 2: 文件结尾 |
例如,观察以下代码:
txtFile=open("D:/python/fruitEN.txt")
print(txtFile.read())
txtFile.close()
txtFile=open("D:/python/fruitEN.txt")
print(txtFile.readlines()) #注意readline是读一行,readlines是读全文件内容,每行为列表一个元素。
txtFile.close()
以上两段代码结果:

如果代码为:
txtFile=open("D:/python/fruitEN.txt")
print(txtFile.read())
print(txtFile.readlines())
txtFile.close()
运行结果,

为什么print(txtFile.readlines())仅输出空的列表呢?
因为当执行open("D:/python/fruitEN.txt")时,相当于读文件的指示标(指针)在文件开始,当执行完print(txtFile.read())后,指针就移到了文件尾部。执行print(txtFile.readlines())时,指针处已经没有内容了,所以输出结果是空列表。
那怎样才可以让文件又从头开始读取呢?
使用txtFile.seek(0)就可以将文件指针移到文件开头处。
txtFile=open("D:/python/fruitEN.txt")
print(txtFile.read())
txtFile.seek(0)
print(txtFile.readlines())
txtFile.close()

2.文件的写入
Python提供了文件内容写入的方法如下表:
方法 | 含义 |
f.write(s) | 向文件写入一个字符串或字节流 |
f.writelines(lines) | 将一个元素为字符串的列表写入文件 |
txtFile=open("D:/python/shici.txt","w")
txtFile.write('新年都未有芳华\n')
txtFile.write('二月初惊见草芽\n')
txtFile.write('白雪却嫌春色晚\n')
txtFile.write('故穿庭树作飞花\n')
txtFile.close()
运行后,在D盘目录python下产生shici.txt文件。
大家还可以使用文件打开模式中的“w+", "a",试试,并配合seek()方法。
此外,为更有效地使用文件,可以使用with语句,其语法如下:
with open(<文件名>,<打开模式>) as 变量名
with open('D:/python/shici.txt', mode='w') as txtFile :
txtFile.write('新年都未有芳华\n')
txtFile.write('二月初惊见草芽\n')
txtFile.write('白雪却嫌春色晚\n')
txtFile.write('故穿庭树作飞花\n')
这样运行完with 语句,自动关闭文件,而不需要等待close()方法来关闭文件,释放文件的占用。








