文件是存储在辅助存储器上的一组数据序列。
概念上文件是数据的集合和抽象。
文件包含文本文件和二进制文件两种类型
Python对文件的采用统一的操作流程,即“打开----操作—关闭”。
Python通过open()函数打开一个文件,并返回一个操作这个文件的变量。
open()函数有两个参数:文件名和打开模式。
文件名可以是文件的实际名字,也可以是带完整路径的名字。
打开模式用于控制以何种方式打开文件。open()函数提供了七个基本的打开模式。
打开模式 | 含义 |
---|---|
‘r’ | 只读模式,如果文件不存在,返回异常FileNotFendError,默认以制度方式打开。 |
‘w’ | 覆盖写模式,文件不存在则创建,存在则覆盖原有文件。 |
‘x’ | 创建写模式,文件不存在则创建,存在则返回FileExistsError |
‘a’ | 追加写模式,文件不存在则创建,存在则在原文件最后追加内容 |
‘b’ | 二进制文件模式 |
‘t’ | 文本文件模式 |
‘+’ | 与r/w/x/a一同使用,在原功能上追加读写功能。 |
文件使用结束后,使用close()方法关闭释放文件使用权。文件关闭后再使用文件操作方法操作该文件则会报I/O异常。
为了演示相关操作,我先在D盘下创建了一个文本文件 san.txt,文件内容如下:
万尺高空蓝天白云,是我的生活。
和你痴心说笑慢慢吃喝,才是我的梦。
——《陪安东尼度过的漫长岁月-绿》
1、如果文件不大,那么可以一次性将文件读入,保存在程序的内部变量之中。file.read()是最常用的一次性读入文件的函数,其结果是一个字符串。
>>> f = open('D:/san.txt','r')
>>> s = f.read()
>>> print(s)
万尺高空蓝天白云,是我的生活。
和你痴心说笑慢慢吃喝,才是我的梦。
——《陪安东尼度过的漫长岁月-绿》
>>>
2、file.readlines()也是一次性读入文件,其结果是一个列表,每个元素是文件的一行。
>>> f = open('D:/san.txt','r')
>>> ls = f.readlines()
>>> print(ls)
['万尺高空蓝天白云,是我的生活。\n', '\n', '和你痴心说笑慢慢吃喝,才是我的梦。\n', '\n', '——《陪安东尼度过的漫长岁月-绿》']
>>>
3、文件打开以后,对文件的读写都有一个读取指针,当文件读入内容后,这个指针就向前移动一个单位,再次读取的时候,是从指针当前位置读取,而不是从头读取。
>>> f = open('D:/san.txt','r')
>>> s = f.read()
>>> print(s)
万尺高空蓝天白云,是我的生活。
和你痴心说笑慢慢吃喝,才是我的梦。
——《陪安东尼度过的漫长岁月-绿》
>>> ls = f.readlines()
>>> print(ls)
[]
因此,之前f.read()已将将指针移动到文件内容的末尾,这时候直接调用f.readlines()对文本内容进行读取时无法从当前位置读取信息,因此返回结果为空。
4、因此,我们也需要一种能够重置指针位置的方法操作文本内容的读取,这时候就需要用file.seek()方法。file.seek(0)将指针移动到内容开头.
f = open(‘D:/san.txt’,‘r’)
s = f.read()
print(s)
万尺高空蓝天白云,是我的生活。
和你痴心说笑慢慢吃喝,才是我的梦。
——《陪安东尼度过的漫长岁月-绿》
>>> f.seek(0)#将指针重置到文件开头
0
>>> ls = f.readlines()
>>> print(ls)
['万尺高空蓝天白云,是我的生活。\n', '\n', '和你痴心说笑慢慢吃喝,才是我的梦。\n', '\n', '——《陪安东尼度过的漫长岁月-绿》']
5、另外,对于文本文件,可以使用遍历循环实现对文本文件的逐行读入。这是因为文本文件可以看做是以行为元素组成的组合类型。逐行读入的方法如下:
f = open('文件路径以及名称','r')
for line in f:
# 处理一行数据
f.close()
【提示】这里注意一点,逐行读入只存在于文本方式,二进制方式打开的数据流不存在行的概念。
6、说完了基本的读取操作,再说一下写入操作。
f.write(s)向文件中写入字符串s,每次写入后,会记录下一个写入指针。该方法可以被反复调用,在写入指针后分批写入内容,直到文件被关闭。
>>> f = open('D:/c.txt','w')
>>> f.write('万尺高空蓝天白云,是我的生活。\n')
16
>>> f.write('和你痴心说笑慢慢吃喝,才是我的梦。\n')
18
>>> f.write('——《陪安东尼度过的漫长岁月-绿》\n')
18
>>> f.close()
使用f.write(s)时,需要显式使用‘ \n’对写入的文本进行分行。如果不分行,每次写入的字符串就会连接在一起。
写入后结果如下:
7、f.writelines(lines)直接将列表类型中的各元素连接起来写入文件中。
>>> ls = ['万尺高空蓝天白云,是我的生活。\n','和你痴心说笑慢慢吃喝,才是我的梦。\n','——《陪安东尼度过的漫长岁月-绿》']
>>> f = open('D;/d.txt','w')
Traceback (most recent call last):
File "" , line 1, in <module>
f = open('D;/d.txt','w')
FileNotFoundError: [Errno 2] No such file or directory: 'D;/d.txt'
>>> f = open('D:/d.txt','w')
>>> f.writelines(ls)
>>> f.close()
再次悄咪咪的佛系推一下自己的交流群。欢迎各位大佬莅临本群指导菜鸟,也欢迎各个菜鸟一起菜鸟互啄。