2022-04-23-Pythonwith-open的用法
目录
Python——with open()的用法
用途:是python用来打开本地文件的,他会在使用完毕后,自动关闭文件,相对open()省去了写close()的麻烦
用法:
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表示不加。这个属性一般程序员用不着,由程序内部使用
- 案例
./ 表示在当前文件夹下,如果没有该文件就自动创建
with open('./sogou.html', 'w', encoding='UTF-8') as fp:
page_txt=fp.write()
print('爬取数据结束!!!')
- 可能会遇到到问题
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()更方便。
68747470733a2f2f62:6c6f672e6373646e2e6e65742f6d305f34383933363134362f:61727469636c652f64657461696c732f313234333630373334