精华内容
下载资源
问答
  • 一.前言 我们在处理小的文本文件时一般使用.read()、.readline()和....1.看到文件这么,我们的第一反应都是把文件分割成小块的读取不就好了吗 def read_in_chunks(filePath, chunk_size=1024*1024): """ ...

    一.前言

    我们在处理小的文本文件时一般使用.read().readline() 和 .readlines(),当我们的文件有10个G甚至更大时,用上面的方法内存就直接爆掉了。

    二.解决办法

    1.看到文件这么大,我们的第一反应都是把文件分割成小块的读取不就好了吗

    def read_in_chunks(filePath, chunk_size=1024*1024):
        """
        Lazy function (generator) to read a file piece by piece.
        Default chunk size: 1M
        You can set your own chunk size 
        """
        file_object = open(filePath)
        while True:
            chunk_data = file_object.read(chunk_size)
            if not chunk_data:
                break
            yield chunk_data
    if __name__ == "__main__":
        filePath = './path/filename'
        for chunk in read_in_chunks(filePath):
            process(chunk) # <do something with chunk>

    2.使用with open()

    #If the file is line based
    with open(...) as f:
        for line in f:
            process(line) # <do something with line>

    3.fileinput处理

    import fileinput
    for line in fileinput.input(['sum.log']):
        print line

     

     

    参考:http://chenqx.github.io/2014/10/29/Python-fastest-way-to-read-a-large-file/

             http://www.zhidaow.com/post/python-read-big-file

     

    转载于:https://www.cnblogs.com/jeesezhang/p/5949696.html

    展开全文
  • python读取csv文件

    2018-10-22 10:03:42
    csv简介:csv是一种用逗号分割列用回车分割行的文本文件,对于小数据量可以使用wps、Excel来打开,对于上G的大文件可以使用Snapde电子表格软件打开 import csv # 将使用的文件的名称存储在filename中 filename='E...

    csv简介:csv是一种用逗号分割列用回车分割行的文本文件,对于小数据量可以使用wps、Excel来打开,对于上G的大文件可以使用Snapde电子表格软件打开

    import csv
    
    # 将使用的文件的名称存储在filename中
    filename='E:\csvprocess\emg-002-001-right-.csv'
    # 打开该文件,并将文件对象存储在 f 中
    with open(filename) as f:
        # 接收文件对象,并创建一个与文件相关的 阅读器(reader)对象
        reader=csv.reader(f)
        #csv的函数next(),将 阅读器对象传递,并返回文件的下一行
        header_row=next(reader)
    
        #创建一个空列表
        highs=[]
        #遍历文件中剩余的各行
        #每次都自动返回文件中的一行数据,以列表的形式返回,从第二行开始
        for row in reader:
            #row:表示读取文件的一行数据,row[1]返回列表索引值为1的值
            highs.append(row[1])
    
        print(highs)
    

    结果

    展开全文
  • 主要介绍了Python实现模拟分割大文件及多线程处理的方法,涉及Python文件读取分割及多线程相关操作技巧,需要的朋友可以参考下
  • 大家都知道Python 读文件的方式多种多样,但是当需要读取一个大文件的时候,不同的读取方式会有不一样的效果。下面就来看看详细的介绍吧。 场景 逐行读取一个 2.9G 的大文件 CPU i7 6820HQ RAM 32G 方法 对每一...
  • 本文通过代码给大家介绍了Python 逐行分割大txt文件的方法,在文中给大家提到了Python从txt文件中逐行读取数据的方法,需要的朋友参考下吧
  • 前言大家都知道Python 读文件的方式多种多样,但是当需要读取一个大文件的时候,不同的读取方式会有不一样的效果。下面就来看看详细的介绍吧。场景逐行读取一个 2.9G 的大文件CPU i7 6820HQRAM 32G方法对每一行的...

    前言

    大家都知道Python 读文件的方式多种多样,但是当需要读取一个大文件的时候,不同的读取方式会有不一样的效果。下面就来看看详细的介绍吧。

    场景

    逐行读取一个 2.9G 的大文件

    CPU i7 6820HQ

    RAM 32G

    方法

    对每一行的读取进行一次分割字符串操作

    以下方法都使用 with…as 方法打开文件。

    with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。

    方法一 最通用的读文件方式

    with open(file, "r") as fh:

    for line in fh.readlines():

    line.split("|")

    运行结果: 耗时 15.4346568584 秒

    系统监视器中显示内存从 4.8G 一下子飙到了 8.4G, fh.readlines() 将读取的所有行数据存到内存,这种方法适合小文件。

    方法二

    with open(file, "r") as fh:

    line = fh.readline()

    while line:

    line.split("|")

    运行结果: 耗时 22.3531990051 秒

    内存几乎没有变化,因为内存中只存取一行的数据,但是时间明显比上一次的长,对于进一步处理数据来说效率不高。

    方法三

    with open(file) as fh:

    for line in fh:

    line.split("|")

    运行结果: 耗时 13.9956979752 秒

    内存几乎没有变化,速度也比方法二快。

    for line in fh 将文件对象 fh 视为可迭代的,它自动使用缓冲的 IO 和内存管理,因此您不必担心大文件。这是很 pythonic 的方式!

    方法四 fileinput 模块

    for line in fileinput.input(file):

    line.split("|")

    运行结果: 耗时 26.1103110313 秒

    内存增加了 200-300 MB,速度是以上最慢的。

    总结

    以上方法仅供参考,公认的大文件读取方法还是三最好。但是具体情况还是要根据机器的性能、处理数据的复杂度。

    好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    展开全文
  • 1.1 读取大文件的末尾n行 # 采用偏置方法读取末尾三百行文本 def read_tail_n(fname, n_lines): off = - 100 # 偏置量 min_size = - os.path.getsize(fname) # 最小量 with open(fname,'rb+') as f: while True:...

    说明

    有时候会有一些特别大的文本文件需要拆分处理

    内容

    1 曾经用过的笨办法

    1.1 读取大文件的末尾n行

    # 采用偏置方法读取末尾三百行文本
    def read_tail_n(fname, n_lines):
        off = - 100 # 偏置量
        min_size = - os.path.getsize(fname) # 最小量
        with open(fname,'rb+') as f:
            while True:
                if off < min_size:
                    f.seek(min_size, 2)
                    res_lines = f.readlines()
                    break
                f.seek(off, 2) # 2 代表文件末尾,往回追 off个字符
                lines= f.readlines()
                if len(lines) >  n_lines + 1:
                    res_lines = lines[-n_lines:]
                    break
                off *= 2
        return res_lines
    
    

    1.2 读取某些行进入内存

    def read_somelines_mem(filename,  start_line = 1 , end_line = 100):
        f = open(filename, 'r')
        line_count = 0
        start_line -= 1 # 和数组索引对齐
        lines = []
        for i in range(end_line): # 从头开始循环
            line = f.readline()
            if line_count >= start_line:
                lines.append(line)
            line_count +=1  # line_count是行指针
        f.close()
        return lines
    

    1.3 计算文件的行数

    # 读取大文件行数
        def nrow_big_txt(filename):
            cnt = 0
            with open(filename,'r') as f:
                for line in f:
                    cnt+=1
            print('total lines: %s' % cnt)
            return cnt
    

    2 新办法

    使用os包调用linux的命令。

    2.1 head

    import os 
    def get_head_lines(fpath, line_num,is_line = False):
        cmd1 = ''' head -n %s %s''' % (line_num, fpath)
        res = os.popen(cmd1).read()
        if is_line:
            # 最后一行是空的,多出来的
            res = res.split('\n')[:-1]
        return res
    get_head_lines('./xxx股票招股说明书.txt', 20)
    
    ' \n \n \n股份有限公司 \nYes Optoelectronics CO., LTD. \n辽宁省路 288 号 \n \n \n \n首次公开发行股票招股说明书 \n \n \n \n保荐人(主承销商) \n \n(住所:深 111号) \n \n \n \n \n'
    

    2.2 sed

    获取文件的中间n行

    import os 
    # 获取大文本的中间n行(左闭右开)。is_line=True会根据换行符\n分行,否则就不分
    def get_lines_txtfile(fpath, start_line, end_line, is_line = False):
        # sed命令会取到右边
        end_line -=1
        cmd1 = '''sed -n '%s,%sp' %s ''' % (start_line, end_line, fpath)
        res = os.popen(cmd1).read()
        if is_line:
            # 最后一行是空的,多出来的
            res = res.split('\n')[:-1]
        
        return res 
    ---200行:
    get_lines_txtfile('./xxx股票招股说明书.txt', 200,201)
    '理人员发出应由其增持股份稳定股价的书面通知。 \n'200行到210行
    get_lines_txtfile('./xxx股票招股说明书.txt', 200,210)
    '理人员发出应由其增持股份稳定股价的书面通知。 \n董事、高级管理人员增持股份的启动程序: \n(1)在应由董事、高级管理人员增持股份稳定股价时,有增持义务的公司\n董事、高级管理人员应在收到公司通知后 2 个交易日内,就其是否有增持公司股\n票的具体计划书面通知公司并由公司进行公告,公告应披露拟增持的数量范围、\n价格区间、总金额等信息。 \n(2)有增持义务的公司董事、高级管理人员应在增持公告做出之日开始履\n行与增持相关法定手续,并在依法办理相关手续后 30 个交易日内实施完毕。 \n(3)增持方案实施完毕后,公司应在 2 个交易日内公告公司股份变动报告。 \n如果公司公告增持计划后 3 个交易日内其股价已经不满足启动稳定公司股\n'
    

    Note:JSON文件也可以这么读取

    sed -n '2,4p' test.json
    

    2.3 tail

    import os 
    def get_tail_lines(fpath, line_num,is_line = False):
        cmd1 = ''' tail -n %s %s''' % (line_num, fpath)
        res = os.popen(cmd1).read()
        if is_line:
            # 最后一行是空的,多出来的
            res = res.split('\n')[:-1]
        return res
    ---
    get_tail_lines('./xxx发行股票招股说明书.txt', 20)
    '雅情况如下: \n序号 出资人名称 出资比例 \n1 杨 100.00% \n合计 100.00% \n(七)私募证券投资基金 \n永柏联投新三板为契约型私募投资基金,已于\n有限公司  招股说明书 \n \n333 \n2016 年 5 月 16 日在中基金备案手续,备案\n编码为 S201;其私募基金管理有限公司,已于 2015\n年 6 月 26 日在中国证券投登记手续,登记编\n号为 P101。 \n永柏新三资基金份额持有人情况如下: \n序号 出资人名称 出资比例 \n1 华 90.00% \n2 钱 10.00% \n合计 100.00% \n \n \n'
    

    2.4 wc

    使用wc命令 具体通过wc --help 可以查看。
    
    如:wc -l filename 就是查看文件里有多少行
    
           wc -w filename 看文件里有多少个word。
    
           wc -L filename 文件里最长的那一行是多少个字。
    
    import os 
    def get_line_num(fpath):
        cmd1 = ''' wc -l %s ''' %  fpath
        res = os.popen(cmd1).read()
        return int(res.split()[0])
    ---
    get_line_num('./xxx股票招股说明书.txt')
    14057
    
    展开全文
  • index=False,header=False) if __name__ == '__main__': # 路径------------------------------------------- path = '' reader = pd.read_table(path,sep=',', chunksize=3,encoding="utf-8") ###分块读取参数记得...
  • 程序用python3运行时,可将当前路径下的aa.txt文件读取后,按空格分割成一系列的单词,然后统计这些单词出现的次数,按频率从到小排序后,写入ar.txt文件中。涉及的语法有:1、中英文混合对齐;2、list高级排序,...
  • Python分割文件以及合并文件 收藏 用Python进行文件操作是比较简单的,在Python中file是内置...文件分割的原理很简单:以二进制形式打开文件流,按照指定的大小读取,然后写入新文件。文件合并的原理正好相反。下面的
  • Python 读文件的方式多种多样,但是当需要读取一个大文件的时候,不同的读取方式会有不一样的效果。 场景 逐行读取一个 2.9G 的大文件 CPU i7 6820HQ RAM 32G 方法 对每一行的读取进行一次分割字符串操作 以下方法...
  • Python分割文件以及合并文件

    千次阅读 2007-08-01 10:04:00
    Python进行文件操作是比较简单的,在Python中file是内置...文件分割的原理很简单:以二进制形式打开文件流,按照指定的大小读取,然后写入新文件。文件合并的原理正好相反。下面的代码摘自PP3rd里面。split_file.py
  • 最近生产环境系统出问题,为了... 开洞脑袋,想啊想,记得曾经看过一篇Python读取大文件,而且可以让内存不爆掉的文章。同时又结合分而治之的思想。ps:据说hadoop好像也是这种思想。因此决定把大文件,分隔处理成小...
  • mport os,glob import csv,re import pandas as pd import shlex save_f=open('cellrelation.csv','w') with open('./EUtranCellRelation.csv','r') as cellrelation: for line in cellrelation: ...
  • 文件类型:.csv,.txt,.xlsx .csv文件,一行即为数据表的一行。....txt文件和.csv文件没有太差别,.txt文件也可由用逗号进行分割,直接将.txt文件改成.csv文件完全可以。 用excel打开data1.csv文...
  • Pandas与EXCEL之数据读取/保存/文件分割/文件合并

    万次阅读 多人点赞 2018-05-31 18:54:38
    如果你是数据分析挖掘从业人员,想必经常会用到EXCEL,但是一遇到很多数据时往往一个简单的操作都足以让性能一般的电脑卡上半天。...(1)读取EXCEL文件如果只是想简单的读取,看下面:import pandas a...
  • 很多时候处理数据会碰到CSV文件,如果是一般的少量文件问题不大,一旦碰到大型的...将csv分割为多个excel文件的方法: ① 将csv文件读取进来 ② 将需要的数据存储,不需要的数据过滤掉 ③ 将处理过的文件存储到ex...
  • python拆分数据量csv文件

    千次阅读 2020-07-29 19:11:48
    转化前的数据量的csv文件: 转化后的多个小数据量的csv文件: 本代码利用pandas库读取csv文件、写入文件。再利用列表进行分割匹配操作(该csv文件target为1时是连续两行数据,所以需要上一个与接下来一个的...
  • python实现小说分割

    2019-07-03 22:10:28
    小说分割器 代码如下 import os import chardet import sys ...打开指定文件(检测文件是否存在),读取数据 2.遍历,创建新文件名 文件名+数字.txt 3.打开新文件,写入数据 3.写入完成,再见 ...
  • 1、大文件读取,一行一行读入,避免一次性读入,内存溢出的情况 2、文件编码格式的处理,避免乱码 3、python中字典对象的排序,按value值排序 """ import os import chardet def get_encoding(filename): """ :...
  • python3 网络文件传输

    2020-01-26 21:39:33
    使用open函数以二进制模式读取文件,并分割成指定大小的数据包发送 约定好在传输的开始先发送文件名,传输的结尾发送停止代号 发送端: sender.py: FLAG='$end$' def sendFile_TCP(FILEPATH,ADDR,BUF=1024*64): ...
  • 小白最近在做有关医学图像处理方面的图像分割与三维重建,其中python提供的vtk,itk库都是功能非常强大的,在此期间也遇到一些问题,解决后记录一下,大家一起学习,希望大神也可以帮忙指点。 1.有关dcm文件读取与...
  • 另一方面使用SQL来储存文本文件最为安全,之前使用CSV,txt存储的文本文件最后莫名其妙地出现一些奇怪字符,导致读取数据分割时出现错乱。下面给出一个简单的代码,将本地JSON文件内容存入数据库。  说明:python...
  • Python处理pdf文件的包

    千次阅读 2012-06-08 12:09:06
    读取文档信息(标题,作者,……)逐页分割文件逐页合并文件裁剪页面合并多个页面为一个页面加密、解密PDF文件 ReportLab 强大的生成PDF文件的库。 主页:http://www.reportlab.com/software/opensource/rl
  • 1、电脑内存不够,读取文件导致报错 试验环境: 操作系统:Linux 内存大小:4G 文件大小:8G 文件类型:txt 常规读取文本代码:使用read_csv df = pd.read_csv(os.path.join(temp_path,"{}.txt".format...
  • 浏览器通过post表单上传文件python如何解析? ``` ... ------xxx ...Content-Disposition: form-data;...Content-Type: application/octet-stream ...(一下全部读取完不现实,表单有多个文件,而且文件内存溢出)
  • 基本操作 ...data = f.read() # 读取剩下所有内容,文件大时候不要用 f.close()#关闭文件 如果我们想循环文件,并且在第九行输出分割的话: for index, line in enumerate(file.readlines()): if(...

空空如也

空空如也

1 2 3 4 5 6
收藏数 105
精华内容 42
关键字:

python读取大文件分割

python 订阅