1. 用途:是python用来打开本地文件的,他会在使用完毕后,自动关闭文件,相对open()省去了写close()的麻烦
2. 用法:
with open(file="你要打开的路径名(或保存内容的地址)",mode="r/w/a",encoding="utf-8") as f:
data=f.read/write() print(data)
如果没有指定的路径,会自动新建文件,无需先去新建。
2.1 关于mode的三种常用模式:
r:只读 用read() w: 只写 用write() // 会清除之前写的内容 a: 追加内容,用write()
//会在已经写的内容基础上追加新的内容
全部模式
r: 以只读方式打开文件。文件的指针将会放在文件的开头。这是**默认模式**。 rb:
以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 r+: 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 w:
打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 wb:
以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 w+:
打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 a:
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 ab:
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+: 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
2.2 file对象的属性:
file.read([size]) 将文件数据作为字符串返回,可选参数size控制读取的字节数 file.readlines([size])
返回文件中行内容的列表,size参数可选 file.write(str) 将字符串写入文件 file.writelines(strings)
将字符串序列写入文件 file.close() 关闭文件 file.closed 表示文件已经被关闭,否则为False file.mode
Access文件打开时使用的访问模式 file.encoding 文件所使用的编码 file.name 文件名 file.newlines
未读取到行分隔符时为None,只有一种行分隔符时为一个字符串,当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束的列表
file.softspace 为0表示在输出一数据后,要加上一个空格符,1表示不加。这个属性一般程序员用不着,由程序内部使用
3. 案例
./ 表示在当前文件夹下,如果没有该文件就自动创建
with open('./sogou.html', 'w', encoding='UTF-8') as fp: page_txt=fp.write()
print('爬取数据结束!!!')
4. 可能会遇到到问题
4.1 把运行结果写入到外部到文件中,只显示了一行:可能原因是在with open中mode模式有误,应该是“a”,而不是“w”
4.2 在写入文件时,有乱码:在with open中到“file=“后写上一个r,之后再引入路径。
5.需要注意的点
5.1 要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数
5.2
读取时调用read()将一次性读取文件的全部内容,如果文件有10G,内存就爆了,保险起见可以反复调用read(size)方法,每次最多读取size个字节的内容。
5.3 调用readline()可以每次读取一行内容,调用 readlines()一次读取所有内容并按行返回list。
5.4
根据需要调用:如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()更方便。