广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python如何读取一个大于10G的txt文件
  • 315
分享到

python如何读取一个大于10G的txt文件

2023-06-15 07:06:25 315人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家分享的是有关python如何读取一个大于10G的txt文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言用Python 读取一个大于10G 的文件,自己电脑只有8G内存,一运行就报内存溢出:Me

这篇文章给大家分享的是有关python如何读取一个大于10G的txt文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

前言

Python 读取一个大于10G 的文件,自己电脑只有8G内存,一运行就报内存溢出:MemoryError
python 如何用open函数读取大文件呢?

读取大文件

首先可以自己先制作一个大于10G的txt文件

a = '''2021-02-02 21:33:31,678 [Django.request:93] [base:get_response] [WARNING]- Not Found: /Http:/123.125.114.144/2021-02-02 21:33:31,679 [djanGo.server:124] [basehttp:log_message] [WARNING]- "HEAD http://123.125.114.144/ HTTP/1.1" 404 16782021-02-02 22:14:04,121 [django.server:124] [basehttp:log_message] [INFO]- code 400, message Bad request version ('HTTP')2021-02-02 22:14:04,122 [django.server:124] [basehttp:log_message] [WARNING]- "GET ../../mnt/custom/ProductDefinition HTTP" 400 -2021-02-02 22:16:21,052 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/login HTTP/1.1" 301 02021-02-02 22:16:21,123 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/login/ HTTP/1.1" 200 38762021-02-02 22:16:21,192 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/img/main_bg.png HTTP/1.1" 200 28012021-02-02 22:16:21,196 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/iconfont/style.CSS HTTP/1.1" 200 16382021-02-02 22:16:21,229 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/img/bg.jpg HTTP/1.1" 200 1359902021-02-02 22:16:21,307 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/iconfont/fonts/icomoon.ttf?u4m6fy HTTP/1.1" 200 69002021-02-02 22:16:23,525 [django.server:124] [basehttp:log_message] [INFO]- "POST /api/login/ HTTP/1.1" 302 02021-02-02 22:16:23,618 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/index/ HTTP/1.1" 200 184472021-02-02 22:16:23,709 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/js/commons.js HTTP/1.1" 200 132092021-02-02 22:16:23,712 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/css/admin.css HTTP/1.1" 200 196602021-02-02 22:16:23,712 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/css/common.css HTTP/1.1" 200 10042021-02-02 22:16:23,714 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/js/app.js HTTP/1.1" 200 208442021-02-02 22:16:26,509 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/report_list/1/ HTTP/1.1" 200 146492021-02-02 22:16:51,496 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/test_list/1/ HTTP/1.1" 200 248742021-02-02 22:16:51,721 [django.server:124] [basehttp:log_message] [INFO]- "POST /api/add_case/ HTTP/1.1" 200 02021-02-02 22:16:59,707 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/test_list/1/ HTTP/1.1" 200 248742021-02-03 22:16:59,909 [django.server:124] [basehttp:log_message] [INFO]- "POST /api/add_case/ HTTP/1.1" 200 02021-02-03 22:17:01,306 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/edit_case/1/ HTTP/1.1" 200 365042021-02-03 22:17:06,265 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/add_project/ HTTP/1.1" 200 177372021-02-03 22:17:07,825 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/project_list/1/ HTTP/1.1" 200 297892021-02-03 22:17:13,116 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/add_config/ HTTP/1.1" 200 248162021-02-03 22:17:19,671 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/config_list/1/ HTTP/1.1" 200 19532'''while True:    with open("xxx.log", "a", encoding="utf-8") as fp:         fp.write(a)

循环写入到 xxx.log 文件,运行 3-5 分钟,PyCharm 打开查看文件大小大于 10G

python如何读取一个大于10G的txt文件

于是我用open函数 直接读取

f = open("xxx.log", 'r')print(f.read())f.close()

抛出内存溢出异常:MemoryError

Traceback (most recent call last):
File "D:/2021kecheng06/demo/txt.py", line 35, in <module>
print(f.read())
MemoryError

运行的时候可以看下自己电脑的内存已经占了100%, cpu高达91% ,不挂掉才怪了!

python如何读取一个大于10G的txt文件

这种错误的原因在于,read()方法执行操作是一次性的都读入内存中,显然文件大于内存就会报错。

read() 的几种方法

read() 方法可以带参数 n, n 是每次读取的大小长度,也就是可以每次读一部分,这样就不会导致内存溢出

f = open("xxx.log", 'r')print(f.read(2048))f.close()

运行结果

2019-10-24 21:33:31,678 [django.request:93] [base:get_response] [WARNING]- Not Found: /http:/123.125.114.144/
2019-10-24 21:33:31,679 [django.server:124] [basehttp:log_message] [WARNING]- "HEAD http://123.125.114.144/ HTTP/1.1" 404 1678
2019-10-24 22:14:04,121 [django.server:124] [basehttp:log_message] [INFO]- code 400, message Bad request version ('HTTP')
2019-10-24 22:14:04,122 [django.server:124] [basehttp:log_message] [WARNING]- "GET ../../mnt/custom/ProductDefinition HTTP" 400 -
2019-10-24 22:16:21,052 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/login HTTP/1.1" 301 0
2019-10-24 22:16:21,123 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/login/ HTTP/1.1" 200 3876
2019-10-24 22:16:21,192 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/img/main_bg.png HTTP/1.1" 200 2801
2019-10-24 22:16:21,196 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/iconfont/style.css HTTP/1.1" 200 1638
2019-10-24 22:16:21,229 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/img/bg.jpg HTTP/1.1" 200 135990
2019-10-24 22:16:21,307 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/iconfont/fonts/icomoon.ttf?u4m6fy HTTP/1.1" 200 6900
2019-10-24 22:16:23,525 [django.server:124] [basehttp:log_message] [INFO]- "POST /api/login/ HTTP/1.1" 302 0
2019-10-24 22:16:23,618 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/index/ HTTP/1.1" 200 18447
2019-10-24 22:16:23,709 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/js/commons.js HTTP/1.1" 200 13209
2019-10-24 22:16:23,712 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/css/admin.css HTTP/1.1" 200 19660
2019-10-24 22:16:23,712 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/css/common.css HTTP/1.1" 200 1004
2019-10-24 22:16:23,714 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/js/app.js HTTP/1.1" 200 20844
2019-10-24 22:16:26,509 [django.server:124] [basehttp:log_message] [I

这样就只读取了2048个字符,全部读取的话,循环读就行

f = open("xxx.log", 'r')while True:    block = f.read(2048)    print(block)    if not block:        breakf.close()

readline():每次读取一行,这个方法也不会报错

f = open("xxx.log", 'r')while True:    line = f.readline()    print(line, end="")    if not line:        breakf.close()

readlines():读取全部的行,生成一个list,通过list来对文件进行处理,显然这种方式依然会造成:MemoyError

真正 Pythonic 的方法

真正 Pythonci 的方法,使用 with 结构打开文件,fp 是一个可迭代对象,可以用 for 遍历读取每行的文件内容

with open("xxx.log", 'r') as fp:    for line in fp:        print(line, end="")

yield 生成器读取大文件

前面一篇讲yield 生成器的时候提到读取大文件,函数返回一个可迭代对象,用next()方法读取文件内容

def read_file(fpath):    BLOCK_SIZE = 1024    with open(fpath, 'rb') as f:        while True:            block = f.read(BLOCK_SIZE)            if block:                yield block            else:                returnif __name__ == '__main__':    a = read_file("xxx.log")    print(a)            # generator objec    print(next(a))      # bytes类型    print(next(a).decode("utf-8"))   # str

运行结果

<generator object read_file at 0x00000226B3005258>
b'\r\n2019-10-24 21:33:31,678 [django.request:93] [base:get_response] [WARNING]- Not Found: /http:/123.125.114.144/\r\n2019-10-24 21:33:31,679 [django.server:124] [basehttp:log_message] [WARNING]- "HEAD http://123.125.114.144/ HTTP/1.1" 404 1678\r\n2019-10-24 22:14:04,121 [django.server:124] [basehttp:log_message] [INFO]- code 400, message Bad request version (\'HTTP\')\r\n2019-10-24 22:14:04,122 [django.server:124] [basehttp:log_message] [WARNING]- "GET ../../mnt/custom/ProductDefinition HTTP" 400 -\r\n2019-10-24 22:16:21,052 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/login HTTP/1.1" 301 0\r\n2019-10-24 22:16:21,123 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/login/ HTTP/1.1" 200 3876\r\n2019-10-24 22:16:21,192 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/img/main_bg.png HTTP/1.1" 200 2801\r\n2019-10-24 22:16:21,196 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/iconfont/style.css HTTP/1.1" 200 1638\r\n2019-10-24 22:16:21,229 [django.server:124] '
[basehttp:log_message] [INFO]- "GET /static/assets/img/bg.jpg HTTP/1.1" 200 135990
2019-10-24 22:16:21,307 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/iconfont/fonts/icomoon.ttf?u4m6fy HTTP/1.1" 200 6900
2019-10-24 22:16:23,525 [django.server:124] [basehttp:log_message] [INFO]- "POST /api/login/ HTTP/1.1" 302 0
2019-10-24 22:16:23,618 [django.server:124] [basehttp:log_message] [INFO]- "GET /api/index/ HTTP/1.1" 200 18447
2019-10-24 22:16:23,709 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/js/commons.js HTTP/1.1" 200 13209
2019-10-24 22:16:23,712 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/css/admin.css HTTP/1.1" 200 19660
2019-10-24 22:16:23,712 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/css/common.css HTTP/1.1" 200 1004
2019-10-24 22:16:23,714 [django.server:124] [basehttp:log_message] [INFO]- "GET /static/assets/js/app.js HTTP/1.1" 200 20844
2019-10-24 22:16:26,509 [django.server:124] [basehtt

感谢各位的阅读!关于“python如何读取一个大于10G的txt文件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: python如何读取一个大于10G的txt文件

本文链接: https://www.lsjlt.com/news/278438.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python如何读取一个大于10G的txt文件
    这篇文章给大家分享的是有关python如何读取一个大于10G的txt文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言用python 读取一个大于10G 的文件,自己电脑只有8G内存,一运行就报内存溢出:Me...
    99+
    2023-06-15
  • python读取一个大于10G的txt文件的方法
    前言 用python 读取一个大于10G 的文件,自己电脑只有8G内存,一运行就报内存溢出:MemoryError python 如何用open函数读取大文件呢? 读取大文件 首先可...
    99+
    2022-11-12
  • python中如何读取txt文件
    这期内容当中小编将会给大家带来有关python中如何读取txt文件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、readline()读取第一行内容只读取文本第一行的内容,以字符串的形式返回结果with...
    99+
    2023-06-15
  • Python 如何读取.txt,.md等文本文件
    看代码吧~ # example.md 1 2 3 4 5 6 7 8 9 >>> with open('example.md') as f: lines = f.readli...
    99+
    2022-06-02
    Python 读取.txt文件 读取.md文件
  • python如何把txt文件读取为数组
    使用python将txt文件读取为数组的方法:1.新建python项目;2.导入os模块;3.使用open()函数打开文件,并创建file对象;4.使用readlines()方法将内容读取为数组;具体步骤如下:首先,打开python,并新建...
    99+
    2022-10-24
  • Java如何高效的读取一个超大文件
    这篇文章主要介绍“Java如何高效的读取一个超大文件”,在日常操作中,相信很多人在Java如何高效的读取一个超大文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java如何...
    99+
    2022-10-19
  • 如何用python打开一个txt文件
    使用python打开一个txt文件的方法:在python可以使用open()函数来打开指定文件,open()函数语法为:“open(文件路径, mode='打开模式')”;在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛...
    99+
    2022-10-13
  • python如何流式读取大文件
    这篇文章将为大家详细讲解有关python如何流式读取大文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何流式读取大文件使用with&hellip;open&hellip;可以从文件中读...
    99+
    2023-06-27
  • 一起聊聊PHP如何从txt文件中读取数据
    本篇文章主要给大家介绍了关于PHP的相关知识,主要给大家介绍了关于PHP如何从txt文件中读取数据的相关资料,文中通过实例代码以及图文介绍的非常详细,对大家学习或者使用PHP具有一定的参考学习价值,希望对大家有帮助。(推荐教程:PHP视频教...
    99+
    2022-08-08
    php
  • python如何批量读取一个文件夹里的所以excel文件
    绪论 在数据分析工作中,尝尝需要处理多个不同月的excel文件,但无奈与excel文件的局限性,不能同时处理多个月的excel数据,所以python的批量读取excel文件就显得十分重要,下面我将展示如何用python将每个月度的excel...
    99+
    2023-09-03
    excel python numpy pandas 数据分析
  • 如何使用BufferedReader读取TXT文件中数值并输出最大值
    本篇内容主要讲解“如何使用BufferedReader读取TXT文件中数值并输出最大值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用BufferedReader读取TXT文件中数值并输出...
    99+
    2023-06-22
  • TXT文件的内容如何利用Java实现读取
    本篇文章为大家展示了TXT文件的内容如何利用Java实现读取,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java读取txt文件内容。可以作如下理解:首先获得一个文件句柄。File file = n...
    99+
    2023-05-31
    java ava txt
  • python如何流式读取数G超大文件
    这篇文章将为大家详细讲解有关python如何流式读取数G超大文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何流式读取数G超大文件使用 with...open... 可以从一个文件中读取数据,这是所有...
    99+
    2023-06-27
  • 如何实现一个读取xml文件内容的类
    这篇文章将为大家详细讲解有关如何实现一个读取xml文件内容的类,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一个读取xml文件内容的类 package project.util.xml;import ja...
    99+
    2023-06-03
  • python读取大文件内存溢出如何解决
    处理大文件时,可以采用以下方法来避免内存溢出问题:1. 逐行读取:使用文件对象的readline()方法逐行读取文件内容,而不是一次...
    99+
    2023-09-15
    python
  • Android应用中如何实现读取项目中的txt文件
    这篇文章给大家介绍Android应用中如何实现读取项目中的txt文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体如下: 众所周知,Android的res文件夹是用来存储资源的,可以在res文件夹下建立一个raw文...
    99+
    2023-05-31
    android txt roi
  • python如何在一个py文件中获取另一个py文件中的值(一个或多个)
    目录如何在一个py文件中获取另一个py文件中的值(一个或多个)在一个py文件中调用另一个py文件中的变量一、目的二、解决方案三、实例演示如何在一个py文件中获取另一个py文件中的值(...
    99+
    2022-11-11
  • 如何使用Python读取大数据中的对象文件?
    在当今的数据时代,大数据已经成为了一种趋势。大数据存储的文件类型也越来越多,其中对象文件是一种常见的文件类型。Python作为一种流行的编程语言,自然也可以用来读取大数据中的对象文件。 本文将介绍如何使用Python读取大数据中的对象文件。...
    99+
    2023-10-26
    对象 文件 大数据
  • 如何使用VBS合并一个文件夹里的TXT
    这篇文章将为大家详细讲解有关如何使用VBS合并一个文件夹里的TXT,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 代码如下:Const ForReading = 1 'VBS的这句不能少...
    99+
    2023-06-08
  • Python如何实现文件的读取
    这篇文章将为大家详细讲解有关Python如何实现文件的读取,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一·Numpy库中操作文件1.操作csv文件import numpy as&nb...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作