使用 Python 读取 8 GB 大小的文件

记录一次读取 9.8G的一个csv文件,并且写入mysql。 记录一次读取1600万 行 X 41列的csv文件。 目标 /环境 文件数据为测试模拟数据,数据大小 9.8G,目标为读取数据,并且写入mysql。 目标文件 运行环境: python3.6 (64位),pandas,pymysql。 思路 采用pandas内置read_csv方法,分块读取文件,开4个进程写入mysql。 遇到的坑有,memoryerror,这里需要强调!!! 必须把写入过的数... 阅读详情

笔试问题

如何使用Python读取1个8GB大小的文件,这个问题其实在笔试中会经常遇到的1个题目。对于在Python中读取文件的操作,一般我们会这样来操作:

f = open('filename','rb')
f.read()

下面我们来找1个比较大的文件,比如1个nginx的日志文件,记得之前有一次公司的1天的nginx日志文件解压为3GB大小,不得不对其进行切分。

发现问题

这里我们找到了1个3G大小的文件。接下来,我们使用普通的读取方式来查看该文件的内容:

f=open('test','rb')
data=f.read()
---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
...
MemoryError: 

我们可以看到1个MemoryError的错误,说明该无文件无法被装载在内存中发生溢出了。 
下面我们来思考下为什么内存会溢出了,在我们打开文件的时候并没有发生任何异常,而在我们调用read方法时才出现问题。我们知道,文件对象的read方法会尝试将所有内容以1行的形式读入,显然这种方式对于大文件是不可行的。

解决方案

在Python中,除了使用read方法读取文件内容外,还有另外2个方法readline和readlines也可以进行内容的读取。 
既然默认read方法是一次性的将内容都读取到内存中,那么我们是否可以指定其每次读取的长度来解决这个问题呢?

data = f.read(1024)
while 1:
  #处理该行的代码
  data = f.read(1024)

而readlines会返回每1行读取的内容的列表,因此有一定风险的。

for l in f.readlines():
   #处理这1行的代码

那么,我们每次读取1行总可以了把。这样我们可以通过如下的方式来进行:

line = f.readline()
while 1:
    #处理该行的代码
    line = f.readline()

我们通过1个无限循环的方式来进行读取。结果发现,使用readlines的方式还是会导致内存不足的情况发生,而通过读取指定字节的方式则可以处理完这个文件。 
在上面的解决方案中,我们需要手动处理文件读取的大小,并在合适的情况退出读取的操作。 
那么,我们有没有更好的解决方案呢?实际上是有的,在Python的手册中,有1个xreadlines的方法,这个方法就类比range和xrange函数的区别。这个方法返回类似iter(f)的字符串,但是遗憾的是该方法在Python版本2.3中已经被淘汰了,官方建议我们使用for语句来替代:

for line in f:
    #处理该行的代码

通过这种方式,Python将处理文件对象为1个迭代器,并自动使用缓存IO和内存管理,这样我们就不需要关注大的文件了。

参考文件:

http://stackoverflow.com/questions/8009882/how-to-read-large-file-line-by-line-in-python


来源:我勒个去

链接:https://segmentfault.com/a/1190000005356779

利用Python读取CSV文件并统计数据 如下CSV文件记录了一下文件的大小,每列希望汇总求和。由于文件大小带有不同的单位GB、MB、KB,在CSV或EXCEL中直接统计也不方便,使用python小脚本可以简单解决以上问题。 代码如下: #coding=utf-8 import csv #import re #拓展:正则表达式 提取字符串中数字 f = open('19Q2_E3DCM.csv') L=list(csv.read... 阅读详情

相关推荐

python实际应用5-从大文件中读取指定大小或记录数

@2019年1月17日 背景 由于工作性质,经常面对不同的问题,某些场景下SQL+Excel、常用办公软件不能处理,这时到网上找一些案例,自己动手用python处理。后续,借此博客记录比较典型的处理过程。 后续,陆续实际处理的问题,如 合并PDF(https://blog.youkuaiyun.com/weixin_44230447/article/details/85231757) 拆分PDF(...

风清扬bj的博客 1242

pytorch 加载大数据集 内存不够 的处理方式

文章用于记录一下本人对于较大数据集加载的问题的一些解决办法和思考。(比较口水话) 我之前训练某个特定任务,习惯于把数据提前预处理为dataset保存起来【参见这里】,然后每次训练的时候直接加载这个文件。我这样做的目的是,方便调代码,使用很小量的数据先把代码调通,当出现一些小问题时不至于数据处理很久。 但是最近在使用自己的一些语料微调一个语言模型, 语料纯文本大小大概在8G左右,使用预处理脚本CPU满速处理后使用torch.save()保存成二进制文件,大概也8G左右。 这个时候问题来了,我使用了8张卡跑代码

cjs8348797的博客 1万+

用python3快速读取30G+的txt文件

读取 30GB+ 的文本文件是一个典型的 大数据处理问题,直接一次性加载到内存会导致内存溢出(OOM)。为了高效处理大文件,可以采用 逐行读取 或 分块读取 的方式。以下是几种常见的 Python 实现方法:

数据知道的博客 2万+

设置文件缓冲

将文件内容写入硬盘的时候会进行系统调用,这类调用的I/O时间比较长,为了减少I/O次数,可以设置文件缓冲区,即达到足够多的数据量的时候才进行磁盘的写入操作。一般缓冲分为:全缓冲、无缓冲、行缓冲。 全缓冲 默认情况下,python文件写入采用全缓冲,大小4096字节。即前4096个字节的信息都会写在缓冲区中,当第4097个字节写入的时候,会把之前的4096个字节通过系统调用写入文件。 ...

lyzkks的博客 987

用python快速读取大文件几个GB以上的csv数据文件

用python快速读取大文件几个GB以上的csv数据文件 1、把csv第一、第二行的数据说明,先读取出来并转换成字典 2、循环行数,使用next()一行行读取 3、把读取出来的数据分批量进行处理 4、比如画图显示、滤波处理等

LDC,公众号【轻松学编程】 741

python简单读取大文件的方法

本文实例讲述了python简单读取大文件的方法。分享给大家供大家参考,具体如下: Python读取大文件(GB级别)采用的办法很简单: with open(...) as f: for line in f: <do> 例如: with open(filepath,'r') as infile: for line in infile: print line 一切都交给python解释器处理,读取效率很高,且占用资源少。 stackoverflow参考链接:How to read large file, line by line in p

python读取超大文件 Python读取大文件(GB)

最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法。 我们谈到“文本处理”时,我们通常是指处理的内容。Python 将文本文件的内容读入可以操作的字符串变量非常容易。文件对象提供了三个“读”方法...

从零开始学习python --zeropython 2万+

uni-app一键登录实战:从云函数配置到前端调用的完整指南

本文详细介绍了uni-app中一键登录功能的实现方法,从DCloud控制台配置到云函数开发,再到前端调用全流程。通过一键登录,用户无需输入账号密码即可快速使用本机手机号登录,显著提升用户体验和登录转化率。文章还提供了常见问题排查和安全合规要点,帮助开发者高效完成集成。

weixin_29291573的博客 445

Python读取大文件(GB)

http://chenqx.github.io/2014/10/29/Python-fastest-way-to-read-a-large-file/ 最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法。 Preliminary   我们谈到

scdxmoe的专栏 8096

SAP SM30数据维护实战:条件筛选与动态校验的实现技巧

本文详细介绍了SAP SM30数据维护的实战技巧,重点讲解如何通过条件筛选实现精准数据查取,以及利用表维护生成器事件实现动态数据检查与校验。文章提供了从基础视图创建到高级事件编程的完整流程,包括调用函数VIEW_MAINTENANCE_CALL传递筛选条件,以及在NEW_DATA和CHANGE_SAVE事件中编写业务规则校验逻辑,帮助开发者提升SM30的管控能力与数据质量。

q9w8e7r6t5的博客 521

手把手教你用示波器实测CAN总线波形:快速区分高速、低速及常见故障

本文详细介绍了如何使用示波器实测CAN总线波形,快速区分高速CAN总线和低速CAN总线,并诊断常见故障。通过实战案例和波形分析,帮助工程师掌握CAN总线信号特征,提升故障排查效率,适用于汽车电子和工业控制领域。

weixin_33217202的博客 409

python读取大文件内存不够_使用 Python 读取 8 GB 大小的文件

笔试问题如何使用Python读取1个8GB大小的文件,这个问题其实在笔试中会经常遇到的1个题目。对于在Python中读取文件的操作,一般我们会这样来操作:f = open('filename','rb')f.read()下面我们来找1个比较大的文件,比如1个nginx的日志文件,记得之前有一次公司的1天的nginx日志文件解压为3GB大小,不得不对其进行切分。发现问题这里我们找到了1个3G大小的文...

weixin_39985279的博客 572

Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别

      最近在做蓝牙开发,刚接触时傻傻的分不清经典蓝牙和低功耗蓝牙的区别,一直用开发低功耗蓝牙的方法去连接经典蓝牙设备,最后当然是一直连接不上了。在此记录下经典蓝牙和低功耗蓝牙的区别和联系。 Android中的蓝牙         说到Android中的蓝牙,大家听到的可能有蓝牙1.0、蓝牙2.0、蓝牙3.0、蓝牙4.0之类的以数字结尾的蓝牙版本号,而实际上,在最新的标准中,已经不再使用数...

zqf_888的博客 4万+

内存不足如何批量导入数据并处理数据

100G的数据 8G内存,如何批量导入数据 使用迭代器批量导入 # -*- coding: utf-8 -*- ''' @Time : 2020/7/6 4:10 下午 @Author : hejipei @File : iterhelper.py ''' import numpy as np def get_data(batch_size): line_count =0 data =[] with open('/Users/hejipei/PycharmProj

人生百态361 542

基于Python的上市公司年报PDF文本抓取与财务风险分析系统

随着大数据时代的到来,金融数据分析已成为投资决策和风险管理的重要工具。上市公司年报包含了丰富的财务信息和经营数据,通过对这些数据的提取和分析,可以评估公司的财务状况和潜在风险。本文将详细介绍如何使用Python构建一个完整的上市公司年报文本抓取与财务风险分析系统,涵盖PDF文本提取、数据清洗、财务指标计算和风险分析等全流程。

2201_76125261的博客 311

什么是 SAP ABAP AMDP?

SAP HANA是SAP开发的一种内存数据库管理系统,它具有出色的性能和处理大规模数据的能力。为了充分利用SAP HANA的性能,SAP引入了AMDP技术,以便将数据库操作推送到数据库服务器执行,从而减少数据传输和处理时间。AMDP方法通常需要输入参数和输出参数。输入参数用于传递数据到SQLScript代码,而输出参数用于接收SQLScript代码的结果数据。ENDMETHOD.ENDCLASS.我们定义了一个输入参数来传递销售订单数据,以及一个输出参数来接收计算结果。ENDMETHOD.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 907

python读取一个文件的大小_Python-读取文件的大小

1.python读取文件以及文件夹的大小1. os.path.getsize(file_path):file_path为文件路径import osos.path.getsize('d:/svn/bin/SciLexer.dll')#2. 遍历文件夹,将所有文件大小加和, os.walk()遍历文件夹import osfrom os.path import join, getsizedef getd...

weixin_39580715的博客 1843

畅游Diffusion数字人(0):专栏文章导航

畅游Diffusion数字人(0):专栏文章导航

沉迷单车的追风少年 1421

测试面试必备:Python中如何高效读取大文件 以4G内存处理8G文件为例

在现代数据处理中,我们经常需要处理远大于系统内存的大型文件。当你的计算机只有4GB内存,却需要处理8GB甚至更大的文件时,传统的文件读取方法会导致内存溢出或系统崩溃。本文将介绍Python中几种高效读取大文件的方法,并提供相应的Java实现作为参考。

qq_58299462的博客 1956

GD32F4xx MCU ADC+DMA 多通道采样

1、GD32F4xx ADC GD32F4xx 的12位ADC是一种采用逐次逼近方式的模拟数字转换器。 1.1 主要特征 可配置12位、10位、8位、6位分辨率; ADC采样率:12位分辨率为2.6MSPs,10位分辨率为3.0 MSPs。分辨率越低,转换越快; PS: MSPs (模拟混合信号转换速率),是指完成1次从模拟转换到数字的AD转换所需的时间的倒数。常用单位是ksps和Msps,表示每秒采样(千)/(百万)次(kilo / Million Samples per Second)。 1msps

madao1234的博客 8117

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

使用python读取二进制文件

数据类型的对应 现在有c++对应的带union结构定义如下 typedef struct ProductInfoDef { union { struct { char szID[50]; int nType; char szProvince[120]; int nYear; int nQuarter; long nSheetCount; }; BYTE byReserve[512];

dawsonzz的博客 1945

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

已解决Python读取20GB超大文件内存溢出报错MemoryError

已解决Python读取20GB超大文件内存溢出报错MemoryError

努力让自己发光,对的人才能迎着光而来 2万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

python读取xml文件效率_在Python 2.7中高效读取800 GB XML文件

I am reading an 800 GB xml file in python 2.7 and parsing it with an etree iterative parser.Currently, I am just using open('foo.txt') with no buffering argument. I am a little confused whether this i...

weixin_39787345的博客 244
上一篇: Python 模块之time
下一篇: Python序列化模型数据为JSON
Wang_AI
博客等级 码龄12年 988粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值