创建和打开文件
在python中想要操作文件需要创建或打开指定的文件并创建文件对象,可以通过内置的open函数来实现。
语法格式通常如下:
file=open(filename, [mode], [buffering])
file:被创建的文件对象
filename:要创建或打开文件的文件名称,需要用单引号后双引号括起来。如果要打开的文件和当前文件在同一个目录下,那么直接写文件名即可,否则需要指定完整的路径。
mode:可选参数,用于指定文件的打开模式,默认为只读 r
buffering:可选参数,用于指定读写文件的缓冲模式,值为0表示不缓存;值为1表示缓存;值大于1则表示缓冲区的大小。默认为缓存模式。
注意:
当要打开的文件不存在时,指定mode参数的值为w、w+、a、a+,就可以创建新文件了
二进制形式打开文件
open函数不仅仅可以以文本的形式打开文本文件,而且还可以使用二进制形式可以打开图片、视频、音频等非文本文件。
例如:
file = open('picture.gif', 'rb')
print(file)
执行结果如下:
<_io.BufferedReader name='picture.gif'>
打开文件时指定编码格式
在使用open()函数打开文件时,默认采用GBK编码,当被打开的文件不是GBK编码是,将抛出如下异常:
要解决该问题有两种方法:
1.直接修改文件的编码
2.在打开文件时,直接指定使用的编码方式
推荐使用第二种方法,即在调用open函数时,通过添加encoding='utf-8’参数即可实现将编码指定为UTF-8,如果所要打开文件为其他编码格式,可将引号中的内容替换成其他指定的编码即可。
例如:
file=open('filename.txt','r',encoding='utf-8')
关闭文件
打开文件后需要及时关闭,以免造成不必要的破坏,关闭文件可以使用文件对象的colse()方法。
语法格式如下:
file.close()
file.closed语句是判断文件是否处于关闭状态,返回布尔类型
使用with语句打开文件
with语句可以保证执行完毕后自动关闭已经打开的文件。
语法格式如下:
with expression as target:
with-body
expression:用于指定一个表达式,这里可以是打开文件的open()函数
target:用于指定一个变量,并且将expression的结果保存到该变量中
with-body:用于指定with语句体
写入文件内容
python文件对象提供了write()方法,可以向文件中写入内容。
语法格式如下:
file.write(string)
调用write()方法向文件中写入内容的前提是在打开文件时,指定的打开模式为w或a,否则将抛出异常
- 向文件中写入内容时,打开模式采用w,则会先清空原文件中的内容,再写入新内容
- 打开模式若为a,则不会覆盖原文件中的内容,只是在文件的结尾处增加新的内容
注意
在写入文件后一定要调用close()方法关闭文件,否则写入的内容不会保存到文件中,如果不关闭文件,也可以调用文件对象提供的flush()方法,把缓冲区的内容写入文件
读取文件
读取指定字符
文件对象提供了read()方法读取指定个数的字符
语法格式如下:
file.read([size])
size:可选参数,如果省略则一次性读取所有的内容
read([size])方法读取文件时,是从文件开头读取的,若想要读取部分内容,可以先使用seek()方法将文件的指针位置移动到新的位置,然后再用read([size])方法读取。
seek()方法的语法格式如下:
file.seek(offset,[whence])
offset:用于指定移动的字符个数,其具体位置与whence参数有关
whence:用于指定从什么位置开始计算,0表示从文件头开始计算,1表示从当前位置开始计算,2表示从文件尾开始计算,默认值为0.
注意:
对于whence参数,如果在打开文件时没有用b模式(即rb),那么只允许从文件头开始计算相对位置
读取一行
在使用read()方法读取文件时,如果文件很大,一次读取全部内容到内存,容易造成内存不足,所以通常采用逐行读取,文件对象提供了readline()方法用于读取每一行数据。
语法格式如下:
file.readline()
读取全部行
读取全部行的作用同调用read()方法时不指定size类似,只不过读取全部行时,返回的是一个字符串列表。
语法格式如下:
file.readlines()