目录

2022-04-23-Pythonwith-open的用法

目录

Python——with open()的用法

  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表示不加这个属性一般程序员用不着由程序内部使用
  1. 案例

./ 表示在当前文件夹下,如果没有该文件就自动创建

    with open('./sogou.html', 'w', encoding='UTF-8') as fp:
        page_txt=fp.write()
    print('爬取数据结束!!!')
  1. 可能会遇到到问题

4.1 把运行结果写入到外部到文件中,只显示了一行 :可能原因是在with open中mode模式有误,应该是“a”,而不是“w”

4.2 在写入文件时,有乱码 :在with open中到“file=“后写上一个r,之后再引入路径。

https://i-blog.csdnimg.cn/blog_migrate/c9afaf53c25c021bdcfd7e023290ee23.png

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