-
掌握文本打开,读取的语法
-
掌握文本写入的语法
2-1
文本打开与读取
掌握读取文本内容,写入文本内容,以及不同格式文件的写入方法。
在当前目录下有一个text.txt文件
内容为:
1一给我里giao
2一给我里giaogiao
文件读取是有语法的
1f = open('text.txt','r',encoding='utf-8')
2# 定义一个变量f,f代表的是打开text.txt文件的操作对象
3# open()内的参数:
4# text.txt-->打开文件名字
5# r-->用读的方式打开(这里除了r,还有w,a+等多种用法,会在下文介绍)
6# encoding='utf-8'-->代表文件的编码格式是utf-8,截图文件另存为讲课
7fd = f.read()
8# 上面说过,f代表的是打开text.txt文件的操作对象
9# 定义一个变量fd,将文件读取的结果赋值给fd
10print(fd)
11f.close()
12# 固定语法,文件打开后必须要关闭,即出现了open()也要出现close()
13
14运行结果>>>一给我里giao
15运行结果>>>一给我里giaogiao
2-2
文件打开方式
文件打开除了r还有许多不同方法的打开,这里重点介绍三种方式
1r --> 文件读取
2a+ --> 文件写入(如果没有文件则会自动创建文件,多用于写入字符串)
3wb+ --> 二进制写入(如果没有文件则会自动创建文件,多用于图片,视频保存)
后面课程爬虫案例中,将会使用wb+保存图片。
2-3
文件读取方式
文件读取的时候,需要注意文件的打开语法必须是文件读取
文件读取除了read()读取全文,这里介绍几种最常见的文件读取语法
1read() --> 读取整个文件
2read(5) --> 读取到第5个字符串
3readlines() --> 将文本的每行作为一个字符串元素保存在列表中
4readline() --> 只读取第一行的内容
2-4
文本写入方式
文件写入的时候,需要注意文件的打开语法必须是文件写入
1f = open('text1.txt','a+',encoding='utf-8')
2# 定义一个变量f,f代表的是打开text.txt文件的操作对象
3# open()内的参数:
4# text1.txt-->用来保存写入数据的文本文件
5# a+-->打开一个文件用于读写,a+默认会在文本的后面继续写入内容
6# encoding='utf-8'-->代表文件的编码格式是utf-8,截图文件另存为讲课
7f.write('一给我里giaogiao一给我里giaogiao')
8# 上面说过,f代表的是打开text.txt文件的操作对象
9# 写入一句话
10print(f.read())
11f.close()
除了write()写入语法,还有writelines()直接写入一个列表。
-
文本内容的读取
-
数据持久化保存
-
爬虫保存图片,文本
-
掌握文件的打开,打开方式
-
掌握文件的写入,写入方式
使用上下文管理器开操作文件
文件每次open()都必须要close(),使用python的上下文管理器可以方便的操作文件的读写,固定的语法如下:
1with open('text.txt','r',encoding='utf-8') as a:
2# 文件读取
3 for i in a.readlines():
4 print(i)
使用with操作可以不同手动加上close(),系统会默认自动关闭
1with open('text.txt','a+',encoding='utf-8') as a:
2# 文件写入
3 a.write('加油~奥里给')
文件打开方式
1r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
2rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
3r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
4rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
5w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
6wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
7w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
8wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
9a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
10ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
11a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
12ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
读取大文件
常规的open(xx).read(),本质上调用read()会一次性读取文件的全部内容,然后把内容保存在内存中,如果文本过大,则会导致内存溢出。
可以通过如下方法解决
使用Fileinput模块
1import fileinput
2
3for line in fileinput.input(['filename']):
4 do_something(line)
调用 fileinput.input() 会按照顺序读取行,但是在读取之后不会将它们保留在内存中。
使用生成器函数
1def read_in_chunks(filePath, chunk_size=1024*1024):
2
3 file_object = open(filePath)
4 while True:
5 chunk_data = file_object.read(chunk_size)
6 if not chunk_data:
7 break
8 yield chunk_data
9
10if __name__ == "__main__":
11 filePath = './path/filename.txt'
12 for chunk in read_in_chunks(filePath):
13 print(chunk)
使用上下文管理器
1with open('filename', 'r', encoding = 'utf-8') as f:
2 for line in f:
3 print(line)
with 语句句柄负责打开和关闭文件(包括在内部块中引发异常时),for line in f 将文件对象 f 视为一个可迭代的数据类型,会自动使用 IO 缓存和内存管理,这样就不必担心大文件了
往期推荐
本文始发于微信公众号(安全研发):Python安全开发之文件读取写入操作【C07课】
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论