且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

大文件的读取方式 | Python从入门到精通:高阶篇之四十七

更新时间:2022-06-22 01:49:44

查看上一节:文件的简单读取

读取大文件

上节课我们讲了可以使用read来读取文件,而且使用open来打开文件的话是要考虑文件的编码格式的,另外关于二进制文件如何打开后续再说。
read()使用的几点注意:
1、如果直接调用read()它会将文本文件的所有内容全部都读取出来;
2、如果要读取的文件较大的话,会一次性将文件的内容加载到内存中,容易导致内存泄漏;所以对于较大的文件,不要直接调用read()。
那该如何读取大文件呢?首先使用help查看一下read()的信息:

help(file_obj.read)

执行结果为:
大文件的读取方式 | Python从入门到精通:高阶篇之四十七
可以看到有一个size的数据,并且大小为-1。
注意:
1、 read()可以接收一个size作为参数,该参数用来指定要读取的字符的数量;
2、默认值为-1,它会读取文件中的所有字符;
3、可以为size指定一个值,这样read()会读取指定数量的字符;
4、每一次读取都是从上次读取到位置开始读取的
5、如果字符的数量小于size,则会读取剩余所有的
6、如果已经读取到了文件的最后了,则会返回''空串
代码如下:

file_name = 'demo2.txt'

try:
    with open(file_name,encoding='utf-8') as file_obj:

        # content = file_obj.read(-1)
        content = file_obj.read(6)#指定读取6个字符
        content = file_obj.read(6)#从上次读取到的位置开始
        print(content)
        print(len(content))
except FileNotFoundError :
    print(f'{file_name} 这个文件不存在!')

执行结果为:
大文件的读取方式 | Python从入门到精通:高阶篇之四十七
如果再添加2行 content = file_obj.read(6))
执行结果为:
大文件的读取方式 | Python从入门到精通:高阶篇之四十七
再添加一行就不再有字符串可以读取了,即返回空串:
大文件的读取方式 | Python从入门到精通:高阶篇之四十七

读取大文件的方式

file_name = 'demo.txt'

try:
    with open(file_name,encoding='utf-8') as file_obj:
        # 定义一个变量,来保存文件的内容
        file_content = ''
        # 定义一个变量,来指定每次读取的大小
        chunk = 100
        # 创建一个循环来读取文件内容
        while True:
            # 读取chunk大小的内容
            content = file_obj.read(chunk)

            # 检查是否读取到了内容
            if not content:
                # 内容读取完毕,退出循环
                break

            # 输出内容
            # print(content,end='')
            file_content += content

except FileNotFoundError :
    print(f'{file_name} 这个文件不存在!')

print(file_content)

执行结果为:
大文件的读取方式 | Python从入门到精通:高阶篇之四十七

点击查看配套视频教程

获取更多Python内容,请订阅Python学习站官方技术圈!