Python全栈系列[更新中]|Python零基础入门篇 - 53 - 文件的读取

万叶集
隐约雷鸣 阴霾天空
但盼风雨来 能留你在此
前言:
? 作者简介:渴望力量的哈士奇,大家可以叫我 哈士奇 。(我真的有一只哈士奇)
如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦
系列专栏:
Python全栈系列 - [更新中]【 本文在该系列】
网安之路系列
?网安之路踩坑篇
?网安知识扫盲篇
?Vulhub 漏洞复现篇
?Shell脚本编程篇
?Web攻防篇2021年9月3日停止更新,转战先知等安全社区
?渗透工具使用集锦2021年9月3日停止更新,转战先知等安全社区
??? 点点点工程师系列
?测试神器 - Charles 篇
?测试神器 - Fiddler 篇
?测试神器 - Jmeter 篇
?自动化 - RobotFrameWork 系列
?自动化 - 基于 JAVA 实现的WEB端UI自动化
自动化 - 基于 MonkeyRunner 实现的APP端UI自动化

Python全栈系列[更新中]|Python零基础入门篇 - 53 - 文件的读取
文章图片

文章目录
    • 文件读取的模式
    • 文件对象的读取方法
      • 使用 read() 函数一次性读取文件全部内容
      • 使用 readlines() 函数 读取文件内容
      • 使用 readline() 函数 逐行读取文件内容
      • mode()、name()、closed() 函数演示
    • 文件读取小实战
      • with open() 函数
      • 利用with open() 函数读取文件的小实战

【Python全栈系列[更新中]|Python零基础入门篇 - 53 - 文件的读取】上一章节 我们学习了如何利用 open() 函数创建一个文件,以及如何在文件内写入内容;今天我们就来了解一下如何将文件中的内容读取出去来的方法。
208700
文件读取的模式
模式 介绍
r (read 的缩写) 读取文件(返回的是字符串类型)
rb 二进制形式读取文件
注意:我们接触文件的写入与读取都是使用的 字符串 类型,那么 集合、元组、列表等就不能写入了么?严格来说是不可以的,但是我们可以进行数据类型转换转为字符串呀 。写入的时候转为字符串类型,读取的时候再转为原来的数据类型即可。 嘿嘿嘿…
文件对象的读取方法
方法名 参数 介绍 举例
read 将文件内容一次性全部独取出来,返回整个整个文件的字符串 f.read()
readlines 将文件内容的每一行内容切割成列表读取,返回文件列表 f.readlines()
readline 将文件每一行内容进行读取,一次返回一行,返回文件中的一行 f.readline()
mode open()函数的 mode属性,调用可返回当前文件模式 f.mode()
name 返回文件名称 f.name()
closed 返回一个 bool 类型,调用 closed() 函数可以知道文件是否关闭 f.closed()
使用 read() 函数一次性读取文件全部内容
注意:下文演示的 Terminal 终端是在 read_test.py 文件路径启动的 ipython 执行的。
这是我们读取 事先创建好的 read_test.py 文件的脚本
import os.pathcurrent_path = os.getcwd()file = open('read_test.py', 'r') data = https://www.it610.com/article/file.read() file.close()print(data) print('***************************') print(type(data))

read_test.py 文件内容如下
# coding:utf-8import os.pathcurrent_path = os.getcwd()file_path = os.path.join(current_path, 'test.txt') file_test = open(file_path, 'w+', encoding='utf-8') file_test.write('人生苦短 我用Python') file_test.read() file_test.close()

Terminal终端 执行效果如下图:
Python全栈系列[更新中]|Python零基础入门篇 - 53 - 文件的读取
文章图片
使用 readlines() 函数 读取文件内容
继续上面的脚本我们使用 readlines() 函数
file = open('read_test.py', 'r') data = https://www.it610.com/article/file.readlines() file.close()print(data) print('***************************') print(type(data))

Terminal 终端 执行的效果如下图:
Python全栈系列[更新中]|Python零基础入门篇 - 53 - 文件的读取
文章图片
注意:区别于 print(data) ,直接打印 data ,显示效果如下:
Python全栈系列[更新中]|Python零基础入门篇 - 53 - 文件的读取
文章图片
这里我们发现每一行和空行都会有一个换行符,如果我们需要读取、处理每一行的内容,空行与换行符会给我们造成很大的困扰。这里我们就可以利用到字符串的 strip() 函数加上 for 循环 就可以处理了。
_data = []for i in data: temp = i.strip() if temp != '': _data.append(temp)_data# >>> 执行结果如下图:

Python全栈系列[更新中]|Python零基础入门篇 - 53 - 文件的读取
文章图片
使用 readline() 函数 逐行读取文件内容
上文我们提到 readline() 函数 会针对文件每一行内容进行读取,一次返回一行;如果想要读取下一行内容,就需要再一次执行 readline() 函数;下面我们来看一下 演示案例:
file = open('read_test.py', 'r') data = https://www.it610.com/article/file.readline()data#>>> 执行结果如下: # >>> '# coding:utf-8\n'data = https://www.it610.com/article/file.readline()data#>>> 执行结果如下: # >>> '\n'

如下图:
Python全栈系列[更新中]|Python零基础入门篇 - 53 - 文件的读取
文章图片
mode()、name()、closed() 函数演示
见下图:
Python全栈系列[更新中]|Python零基础入门篇 - 53 - 文件的读取
文章图片
文件读取小实战 还记得我们上一章节的 文件的创建于写入 里面的实战小案例么?今天我们就在上一章节的实战小案例上进行一个补充,拓展一下我们关于读取文件的功能(函数)
在进行 文件读取小实战之前,我们先来了解一下 wiht open() 函数,如下。
with open() 函数
前文我们了解到,如果想要读取一个文件就需要先使用 open() 函数,打开文件并赋予其打开的模式,最后必须要要操作 close() 函数;这就是一个完整的读取文件内容的一个步骤,但是这个步骤过于繁琐不说,在文件不存在或者没有执行 close() 函数的情况下,还会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在,示例如下:
Python全栈系列[更新中]|Python零基础入门篇 - 53 - 文件的读取
文章图片
每次如果都按照如上最终方案去写的话,实在太繁琐。Python引入了with语句来自动帮我们调用close()方法
重点:!!!with 的作用就是自动调用close()方法 !!!
# 使用方法: with open('/path/to/file', 'r') as f: print(f.read())# >>> 相较于单独使用 open() 函数,是不是代码更佳简洁,并且不必调用f.close()方法了呢?

利用with open() 函数读取文件的小实战
import osdef create_package(path): if os.path.exists(path): raise Exception('%s 已经存在,不可创建' % path) else: os.mkdir(path)init_path = os.path.join(path, '__init__.py') file_init = open(init_path, 'w', encoding='utf-8') file_init.write('# coding:utf-8\n') file_init.close()class Open(object): def __init__(self, path, mode='w', is_return=True):# 这里的 is_return 定义的是换行的意思,结合下文的 message 理解 self.path = path self.mode = mode self.is_return = is_returndef write(self, message): file_test = open(self.path, mode=self.mode) if self.is_return:# 如果返回 Ture 则 在 message 后,增加换行符 message = '%s\n' % message file_test.write(message) file_test.close()def read(self, is_strip=True):# is_strip 用于判断每一行结尾的换行符将其去掉result = []# 定义一个空列表,用来读取每一行内容with open(self.path, mode=self.mode) as file: data = file.readlines() # 文件对象读取文件内容一但脱离 with open() 函数,就会自动执行 close() 函数 关闭文件for line in data:# for循环遍历data ,若读取的那一行内容不为空且如果存在'\n'符,去掉'\n'符然后加入result列表 if is_strip:# is_strip 默认就是 True temp = line.strip() if temp != '': result.append(temp) else:# 如果读取的那一行不为空,加入result列表 if line != '': result.append(line) return resultif __name__ == '__main__': current_path = os.getcwd() open_path = os.path.join(current_path, 'test.txt') open_test = Open(open_path, mode='r') data = https://www.it610.com/article/open_test.read() # data = open_test.read(is_strip=False) print(data)

执行结果如下:
Python全栈系列[更新中]|Python零基础入门篇 - 53 - 文件的读取
文章图片

    推荐阅读