Python安全开发之文件读取写入操作【C07课】

admin 2021年11月12日10:09:32安全开发评论65 views3290字阅读10分58秒阅读模式

Python安全开发之文件读取写入操作【C07课】

  



           



1
课程目标


  1. 掌握文本打开,读取的语法

  2. 掌握文本写入的语法


2
核心知识



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()直接写入一个列表。


3
应用场景


  1. 文本内容的读取

  2. 数据持久化保存

  3. 爬虫保存图片,文本


4
总结归纳


  1. 掌握文件的打开,打开方式

  2. 掌握文件的写入,写入方式


5
拓展知识


使用上下文管理器开操作文件

文件每次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 缓存和内存管理,这样就不必担心大文件了

往期推荐

Sqlmap速查表/功能移植/Python批量检测SQL注入

Python打包EXE方法汇总整理

Python中常见需求与完成方法

Python 迭代器与生成器

Python常用技巧整理





本文始发于微信公众号(安全研发):Python安全开发之文件读取写入操作【C07课】

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年11月12日10:09:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  Python安全开发之文件读取写入操作【C07课】 http://cn-sec.com/archives/429878.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: