1打开文件
使用python内置函数open()可打开指定的文件,用于对文件进行读取,修改或添加内容。
opem()函数的语法如下所示。
open(fliename[,mode][,encoding][,buffering][,errors][,newline][,closefd][,opener])
open()函数公有8个参数,其中最常用的有3个,分别是filename(文件名称),mode(文件模式)和encoding(文件编码方式),然后后面5个是buffering(设置缓冲),errors(报错级别),newline(区分换行符),closefd(传入的file参数类型),opener(通过调用opener方式,使用自定义的开启器)。除了filename其他都可以省略,省略时会使用默认值。
file=open("myfile.txt")
file.close()
如果打开文件时不指定模式,那么默认为“r”,以只读的方式打开文件。file.close(下面关闭文档会说为什么要这么写)
使用打开模式:
读取使用"r"
写入使用"w"
追加使用"a"
还可以指定以文本模式或者二进制模式打开文字(处理非文本文件(如:图像,exe)时使用)
例:
#文件基本操作(打开模式)
#相当于"r"或"rt"
file1 = open("myfile.txt")
print =("文件打开模式:",file1.mode)
file1.close()
#文本模式写入
file2 =open("myfile.txt","w")
file2.close()
#以二进制模式读写
file3= open("logn.jpg","r+b")#b为二进制
file3.close()
r:只读模式
只读。不可写。打开时光标自动定位到开头位置。
w:只写模式
只写,不可读。打开时自动清空原文档
a:追加模式
只写,不可读。打开时不清空元文档,光标自动定位到文档末尾。
r+:读写模式
先读再写。打开文档时不清空原内容,光标定位正在开始位置。读完后光标会移到文档末尾,所以写的时候是追加在文档最后的,不会覆盖原内容。如果以"r+"模式打开,但是先写后读,那么写入的内容会覆盖原内容,读取时从写结束位置上开始读。如果原文档内容小于新写入的,那么全部被覆盖,读到的为空。如果原文档内容大于新写入的,那么读到的内容为原文档剩下的内容。
w+:写读模式
先写后读。打开文档即清空原文档内容,从文档开头写起,写完后光标自动移到文档末尾此时进行读取,内容为空。需要将光标移到首位,f.seek(0).如果以”w+“模式打开,先进行读操作,读到的内容也是为空,因为打开即被清空。
a+:追加读写模式
先写后读。追加在文档末尾,不会清空原内容,写完后光标移到文档末尾,此时进行读取,内容为空。需要将光标移到首位,f.seek(0).如果以"a+“模式打开,先进行读操作,读到的内容也是为空的
,因为打开即被把光标定位在文档末尾。
文件默认的编码依赖于平台,在windows系统中,默认编码为“cp936”:在Linux系统中,默认编码为“UTF-8”,可以看到不同平台默认的编码是不一样的。
2关闭文件
当完成对文件的操作时,需要适当地关闭,以释放与该文件绑定的资源,可以使用vlose()函数关闭文件。
1,常规方式close()方法关闭工作,使用这种方式并不安全,因为在对文件一些操作时很有可能会引发IOError.一旦出错,代码将会退出而无法执行关闭文件的代码。
2,异常处理
更安全的方式使用try--finally块,即使出现异常。也可以确保文件能够正确的关闭。
3,使用with语句
Python引入with语句,这可以确保当with中的块退出时,文件被安全地关闭。
#常规方式
file1 = open("my_file.txt")
file1.close
#异常处理
try:
file1 = open("my_file.txt")
finally:
file1.close()
#使用with语句
with open("my_file.txt") as f:#文件相关操作,不用显示调用close()
文件读操作:
python的文本的内容读取,必须以读“r”模式打开文件,常用的有三种方法:read(),readline(),readlines()
1 read()
read()是最简单的一种方式,一次读取文件的所有内容放在一个大字符串中。read()函数可以传递参数来读取文件指定编码的字符数,如果没有传递参数则表明读取并返回到文件末尾。
with open("my_file.txt","r",encoding="utf-8") as f :#my_file自己写的一个txt文档
print(f.read(1))
print(f.read(2))
2 readline()
readline()逐行读取文本,结果是一个list。readline()采取逐行读取,所以占用内存少,同时速度比较慢。
with open("my_file.txt","r") as f :
line = f.readline()
while line:
line = line.rstrip("\n")
print(line)
line = f.readline()
3 readlines()
readlines一次性读取文本的所以内容,结果是一个列表(list)。readlines读取的文件内容,每行末尾都会带一个“\n”换行符(可以使用list.ttrio("\n")去除换行符)readlines()一次性读取文本内容,速度比较快。但readlines()随着文本的增大,占的内存会越来越大。
with open("my_file.txt","r") as f :
for line in f.readlines():
line_print = line.rstrip("\n")
print(line_print)
文件写操作:
为了写入文件,需要以写“w”模式打开。追加则使用“a”或者独占创建使用"x"。在使用“w”模式时需要时需要小心,因为如果文件存在,则会进行覆盖,以前的所以数据都将被清除。如果要向文件追加内容,使用模式“a”。Python的文件写操作常用的方式有wirte()和writelines().
1,wirte()
wirte()把参数内容写到文件中。wirte()并不会在字符串后加上一个换行符,需要手动添加。
with open("my_file.txt","w",encoding="utf-8") as f:
f.write("hello python")
f.write("\n")
f.write("你好 python")
2 ,writelines()
writelines()把多行内容写到文件中,参数可以是一个可迭代对象,列表,元组等。
list1 = ["hello python","\n","你好 python"]
with open("my_file.txt","w",encoding="utf-8") as f:
f.writelines(list1)