Python文件的基本操作(一)——文件操作
一、打开文件
file = open(filename,'w')
1.open()
该函数为python内置的方法,用于创造文件对象打开文件。
2.file
是被创建的用于文件对象,相当于一个可以用于读取文件内容,写入文件的接口,文件对象可以使用符合标准的命名。
3.filename为要打开的文件名,当该文件与代码文件在同一文件夹下时,可以直接输入文件名,否则要输入文件的绝对路径。
4.'w'
为文件打开的方式,具体打开方式有以下几种:
打开方式 | 作用 |
---|---|
r | 只读模式打开文件,从文件开头开始读文件 |
rb | 以二进制格式打开文件,从文件开头开始读文件 |
r+ | 读写模式打开文件,读写操作从文件开头开始,写会覆盖原文件 |
rb+ | 二进制格式读写模式打开文件 |
⚠️r
类打开文件的必要条件是该文件必须存在,否则会报错:“No such file or directory:”
打开方式 | 作用 |
---|---|
w | 以只写的模式打开文件 |
wb | 以二进制格式只写模式打开文件 |
w+ | 以读写模式打开文件,会先将文件的内容清空 |
wb+ | 以二进制格式读写模式打开文件 |
w
类的打开方式文件可以是不存在的,当代码执行后会创建代码中filename文件,如以下代码执行:file = open('test.txt','w')
⚠️需要注意的是如果filename不是绝对路径,文件会在控制台所在的当前目录进行创建,如下图所示,我的控制台所处的目录为“文件读写”这一文件夹,故“test.txt”也是创建在该文件夹下的。⚠️并且w
类打开文件的方式,会将原文件的内容进行覆盖,即会将原来的内容删除然后写进新的内容。
那么当希望不覆盖原文件的内容而继续写入文件时,则可以用a
类文件打开方式。
打开方式 | 作用 |
---|---|
a | 以追加模式打开文件,写入的内容将从原文件末尾开始写入 ,当文件不存在时创建文件 |
ab | 以二进制格式追加模式打开文件 |
a+ | 以追加读写模式打开文件 |
ab+ | 以二进制格式追加读写模式打开文件 |
需要说明的是a
方式打开文件,如果文件不存在也会创建文件。并且对一般的文件并不以二进制格式打开文件,对图片、音视频文件使用二进制格式打开才有意义。
当打开文件出现“UnicodeDecodeError”时,说明open
函数默认的编码方式无法打开文件,可以通过指定编码方式打开文件
file = open('test.txt','r',encoding = 'utf-8')
二、关闭文件
关闭文件使用close(),如关闭上面打开的test.txt文件file.close()
,对于完成写操作的文件,关闭文件这一操作相当重要,因为写入的信息首先会存在缓冲区,当文件close()之后才能将缓冲区里的内容写入文件,为避免不必要的意外,应当在完成写操作后及时关闭文件。
还有一种方法可以避免忘记close()操作而导致文件可能被意外更改,即在打开文件时使用with语句,如:
with open('test.txt','w') as file:
pass
当pass部分的代码,即with下的代码被执行完后,文件会被自动关闭。
三、写入文件
当打开文件获得文件对象之后,可以通过文件对象将数据写入文件file.write(data)
,如:
连续写入5个字符串:
with open('test.txt','w') as file:
str = "征鸿Bobibala"
for i in range(0,5):
file.write(str)
运行结果:
换行输入:
with open('test.txt','w') as file:
str = "征鸿Bobibala"
for i in range(0,5):
file.write(str+'\n')
运行结果:
⚠️需要注意的是,写入的内容必须是str即字符串格式的,不然会报错。
四、读取文件
读取文件常用的方法是file.read()
,默认将全部数据读出,如:
with open('test.txt','r') as file:
content = file.read()
print(content)
输出结果:
也可以设置读出字符的数量:
with open('test.txt','r') as file:
content = file.read(5)
print(content)
输出结果:
还可以通过seek()函数用于更改开始读取的位置,再用read()进行从新的位置进行数据读取,但不常用故不细说。
数据还可以一行一行进行读取,为区分效果,test.txt文件中存入数据为《登鹳雀楼》,在文件中的数据如图:
输出一行:
with open('test.txt','r') as file:
content = file.readline()
print(content)
输出结果:
输出三行:
with open('test.txt','r') as file:
for i in range(0,3):
content = file.readline()
print(i,content)
输出结果:
输出的空隙是输出效果,并不算一行,由前面的数字可以知道输出的为三行,运用循环可以将文件内容逐行输出。
输出全部行可以使用file.readlines()
,如:
with open('test.txt','r') as file:
content = file.readlines()
print(content)
输出如下,输出全部行会以列表的格式进行输出,连同换行符一同输出。