说明

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

内容

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()breakf.seek(off, 2) # 2 代表文件末尾,往回追 off个字符lines= f.readlines()if len(lines) >  n_lines + 1:res_lines = lines[-n_lines:]breakoff *= 2return res_lines

1.2 读取某些行进入内存

def read_somelines_mem(filename,  start_line = 1 , end_line = 100):f = open(filename, 'r')line_count = 0start_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 = 0with open(filename,'r') as f:for line in f:cnt+=1print('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 -=1cmd1 = '''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 ''' %  fpathres = os.popen(cmd1).read()return int(res.split()[0])
---
get_line_num('./xxx股票招股说明书.txt')
14057

Python一些可能用的到的函数系列28 超大文本文件分割读取相关推荐

  1. Python一些可能用的到的函数系列37flipflop 对象

    说明 对于调用成功一个函数,立即调用另一个函数的应用.例如从数据库获取了一批数据,将某些结果回写的过程. 内容 假设有两个函数,写成了不定参格式,这样比较通用. hello def hello(*ar ...

  2. Python一些可能用的到的函数系列11 本地哈希和服务器哈希比对

    说明 摘要可以作为文件的唯一识别和信息验证,在进行大量存储时是很有比较的. 内容 以前不太清楚哪里出过错,感觉服务器上计算hash和本地不一致. 由于python的hashlib是对二进制文本进行计算 ...

  3. Python一些可能用的到的函数系列76 最大回撤率

    说明 这个问题其实有点绕,写在这里备忘吧. 内容 最大回撤:从任何一个峰值向后的最大落差. 两个要点: 1 找峰值 2 从峰值往后看,找到最大落差 最后取所有峰值的最大值就是最大回撤. 如下一个数列, ...

  4. Python一些可能用的到的函数系列102 推断df的变量类型

    说明 这个主要是为了在sql里快速建表 内容 对每列的变量进行遍历,去掉空之后进行简单的判定.数值(double.float和date)的数据长度是固定的,变化比较大的是字符型.我觉得可以采用最大最小 ...

  5. Python一些可能用的到的函数系列81 基于Redis Stream的简单消息队列对象

    说明 一个实现消息队列简单管理的对象 内容 代码 import redis # 基于Redis Stream的消息队列 class LittleRQ:def __init__(self, host, ...

  6. python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation)

    python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation Funct ...

  7. python使用matplotlib可视化雷达图(polar函数可视化雷达图、极坐标图、通过径向方向来显示数据之间的关系)

    python使用matplotlib可视化雷达图(polar函数可视化雷达图.极坐标图.通过径向方向来显示数据之间的关系) 目录

  8. python使用matplotlib可视化、使用subplots函数将可视化的画布划分为网格状的若干子区、通过nrows和ncols参数设置设置行数和列数

    python使用matplotlib可视化.使用subplots函数将可视化的画布划分为网格状的若干子区.通过nrows和ncols参数设置设置行数和列数 目录

  9. python使用matplotlib可视化、使用annotate函数以及arrowprops参数在可视化图像中添加箭头和文本注释(arrow and text annotation)

    python使用matplotlib可视化.使用annotate函数以及arrowprops参数在可视化图像中添加箭头和文本注释(arrow and text annotation) 目录

最新文章

  1. innodb表空间结构
  2. Kafka如何在千万级别时优化JVM GC问题?
  3. UT斯达康XV6700应用及常见问题
  4. 为什么用户常常不会做最合理的选择?
  5. ADC128S022的verilog设计与仿真实现
  6. iOS 点转成字符串,再字符串转换成点
  7. presto领读 查询引擎翻译
  8. python 线程(一)理论部分
  9. 2019.08.29定时器以及轮播图
  10. 如何在苹果Mac中使用聚焦搜索 NTFS 格式磁盘?
  11. 超好用的数学公式编辑器MathType7.4下载安装及wps配置
  12. 全网最详细SIFT算法原理实现
  13. IE无法浏览网页的常见原因及解决方法(转)
  14. python缩减数据
  15. 浙江行游14---千岛湖,清凉的世界里
  16. JS将字符串转数组、转数字、转对象;将数组转字符串、转对象;将对象转数组、转字符串
  17. java用axis方式调用webservice接口
  18. 秒杀Excel的动态可视化报表,不用学python,用它仅需10分钟
  19. 3个自由度搬运机械手设计【CAD图纸+毕业论文+电路图+梯形图+接线图】
  20. 1231321321

热门文章

  1. 面试阿里不到半小时被破格录取,问我原因?还不是因为Redis
  2. 车联网是什么,车联网的未来发展趋势是什么
  3. Python小程序:判断闰年
  4. Gnocchi: 4、Gnocchi对接Ceilometer
  5. 从零开始学VUE之Webpack(Html打包插件的使用)
  6. java 10进制转64进制_十进制与64进制互相转换算法
  7. ImmunoChemistry艾美捷基本细胞毒性试验试剂盒测定方案
  8. 免拆诊断 | 2010 款宝马 320i 车冷机急加速时发动机熄火
  9. 异想维度 java_JAVA异常的最佳工程学实践探索
  10. Android实现信息安全中维吉尼亚密码技术