当前位置: 首页 > news >正文

Python: 分块读取文本文件

在处理大文件时,逐行或分块读取文件是很常见的需求。下面是几种常见的方法,用于在 Python 中分块读取文本文件:

在这里插入图片描述

1、问题背景

如何分块读取一个较大的文本文件,并提取出特定的信息?

  • 问题描述:

    f=open('blank.txt','r')
    quotes=f.read()
    noquotes=quotes.replace('"','')
    f.close()rf=open('blank.txt','w')
    rf.write(noquotes)
    rf.close()   f=open('blank.txt','r')
    finished = False
    postag=[]
    while not finished:line=f.readline()words=line.split()postag.append(words[4])postag.append(words[6])postag.append(words[8])              finished=True
    
    • 使用 open()函数打开文件,将文件内容读入变量 quotes,然后用 replace()函数去除所有双引号,再将处理后的内容写回文件。
    • 再次打开文件,并使用 readline() 函数逐行读取文件内容。
    • 对于每一行,将其按空格分割成一个列表 words,并提取出列表中的第 5、7 和 9 个元素,将其添加到 postag 列表中。
  • 问题原因:

    • 问题在于 while not finished: 循环仅迭代了文件的第一行,因此无法处理整个文件。

2、解决方案

  • 使用 xml.etree.ElementTree 模块解析 XML 文件:

    from xml.etree import ElementTreeline = '<word id="8" form="hibernis" lemma="hibernus1" postag="n-p---nb-" head="7" relation="ADV"/>'element = ElementTree.fromstring(line)form = element.attrib['form']
    lemma = element.attrib['lemma']
    postag = element.attrib['postag']print(form, lemma, postag)
    
    • 使用 ElementTree.fromstring() 方法将 XML 字符串解析成一个元素对象。
    • 使用 element.attrib 获取元素的属性,并提取出 formlemmapostag 属性的值。
    • 打印出提取出的信息。
  • 使用正则表达式提取信息:

    import redata = open('x').read()
    RE = re.compile('.*form="(.*)" lemma="(.*)" postag="(.*?)"', re.M)
    matches = RE.findall(data)
    for m in matches:print(m)
    
    • 使用 re.compile() 方法编译正则表达式,并将其应用到文本数据中。
    • 使用 findall() 方法查找所有匹配正则表达式的子字符串,并将其存储在 matches 列表中。
    • 遍历 matches 列表,并打印出每个匹配子字符串。
  • 使用 SAX 解析器解析 XML 文件:

    import xml.saxclass Handler(xml.sax.ContentHandler):def startElement(self, tag, attrs):if tag == 'word':print('form=', attrs['form'])print('lemma=', attrs['lemma'])print('postag=', attrs['postag'])ch = Handler()
    f = open('myfile')
    xml.sax.parse(f, ch)
    
    • 定义一个 SAX 解析器类 Handler,并重写 startElement() 方法,用于处理 XML 文件中的元素。
    • 使用 xml.sax.parse() 方法解析 XML 文件,并指定解析器对象 ch
    • 每次遇到一个 word 元素,就会调用 startElement() 方法,并打印出元素的 formlemmapostag 属性的值。
  • 使用 BeautifulSoup 解析 XML 文件:

    from bs4 import BeautifulSoupsoup = BeautifulSoup(open('myfile').read(), 'xml')for word in soup.find_all('word'):print('form=', word['form'])print('lemma=', word['lemma'])print('postag=', word['postag'])
    
    • 使用 BeautifulSoup() 方法解析 XML 文件,并将其存储在 soup 对象中。
    • 使用 find_all() 方法查找所有 word 元素,并将其存储在 words 列表中。
    • 遍历 words 列表,并打印出每个元素的 formlemmapostag 属性的值。

选择方法

  • 如果需要逐行处理文件,选择方法1。
  • 如果需要分块处理二进制文件或大文本文件,选择方法2。
  • 如果需要按行块处理文件,选择方法3。
  • 如果需要处理大规模的 CSV 文件,选择方法4。

每种方法都有其特定的应用场景,可以根据具体需求选择合适的方法。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQL注入如何判断数据库类型
  • JVM专题之G1垃圾收集器下
  • python学习-容器类型
  • Redis 7.x 系列【22】主从复制配置项
  • 创建数据库表的语法定义包含了SQL Server、Mysql、PostgreSQL、SQLite的示例
  • zabbix 学习笔记
  • 基础架构服务API:降低成本,提升业务效益
  • DropNotch for Mac v1.0.1 在 Mac 刘海快速使用 AirDrop
  • 华为机考真题 -- 攀登者1
  • 深入浅出Transformer:大语言模型的核心技术
  • uniapp移动端实现商品拖拽集合,一行多个商品左滑删除功能!
  • python破解密码·筛查和选择
  • 《财经态度》︱行业领跑品牌格行创始人刘永先独家揭秘:格行随身WiFi如何抗内卷,成就品质与服务双重骄傲?随身WiFi推荐第一名!
  • FFmpeg 实现从麦克风获取流并通过RTMP推流
  • 递归(五)—— 初识暴力递归之“如何利用递归实现栈逆序”
  • 03Go 类型总结
  • Angular Elements 及其运作原理
  • css系列之关于字体的事
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Druid 在有赞的实践
  • IndexedDB
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • js ES6 求数组的交集,并集,还有差集
  • JS专题之继承
  • mysql 数据库四种事务隔离级别
  • python_bomb----数据类型总结
  • tensorflow学习笔记3——MNIST应用篇
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 关于Flux,Vuex,Redux的思考
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 技术:超级实用的电脑小技巧
  • 前嗅ForeSpider教程:创建模板
  • 如何选择开源的机器学习框架?
  • 算法-插入排序
  • 一份游戏开发学习路线
  • 云大使推广中的常见热门问题
  • 怎么将电脑中的声音录制成WAV格式
  • ​如何使用QGIS制作三维建筑
  • ​数据结构之初始二叉树(3)
  • #android不同版本废弃api,新api。
  • #微信小程序(布局、渲染层基础知识)
  • (04)odoo视图操作
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (7)svelte 教程: Props(属性)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (void) (_x == _y)的作用
  • (附源码)ssm高校实验室 毕业设计 800008
  • (七)Flink Watermark
  • (三)终结任务
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转) ns2/nam与nam实现相关的文件
  • .net操作Excel出错解决