在处理大文件时,逐行或分块读取文件是很常见的需求。下面是几种常见的方法,用于在 Python 中分块读取文本文件:
1、问题背景
如何分块读取一个较大的文本文件,并提取出特定的信息?
open()
函数打开文件,将文件内容读入变量 quotes
,然后用 replace()
函数去除所有双引号,再将处理后的内容写回文件。readline()
函数逐行读取文件内容。words
,并提取出列表中的第 5、7 和 9 个元素,将其添加到 postag
列表中。while not finished:
循环仅迭代了文件的第一行,因此无法处理整个文件。2、解决方案
xml.etree.ElementTree
模块解析 XML 文件:
from xml.etree import ElementTree line = '<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
获取元素的属性,并提取出 form
、lemma
和 postag
属性的值。re.compile()
方法编译正则表达式,并将其应用到文本数据中。findall()
方法查找所有匹配正则表达式的子字符串,并将其存储在 matches
列表中。matches
列表,并打印出每个匹配子字符串。SAX
解析器解析 XML 文件:
import xml.sax class 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)
Handler
,并重写 startElement()
方法,用于处理 XML 文件中的元素。xml.sax.parse()
方法解析 XML 文件,并指定解析器对象 ch
。word
元素,就会调用 startElement()
方法,并打印出元素的 form
、lemma
和 postag
属性的值。BeautifulSoup
解析 XML 文件:
from bs4 import BeautifulSoup soup = 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
列表,并打印出每个元素的 form
、lemma
和 postag
属性的值。每种方法都有其特定的应用场景,可以根据具体需求选择合适的方法。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。