使用lxml解析Python中带有错误标题的文本文件

使用lxml解析Python中带有错误标题的文本文件,第1张

概述我想用lxml的etree解析文本文件(本地存储).但是我的所有文件(数千个)都有标题,例如: -----BEGIN PRIVACY-ENHANCED MESSAGE-----Proc-Type: 2001,MIC-CLEAROriginator-Name: webmaster@www.sec.govOriginator-Key-Asymmetric: MFgwCgYEVQgBAQICAf 我想用lxml的etree解析文本文件(本地存储).但是我的所有文件(数千个)都有标题,例如:
-----BEGIN PRIVACY-ENHANCED MESSAGE-----Proc-Type: 2001,MIC-CLEAROriginator-name: webmaster@www.sec.govOriginator-Key-asymmetric: MFgwCgYEVQgBAQICAf8DSgAwRwJAW2sNKK9AVtBzYZmr6aGjlWyK3XmZv3dTINen TWSM7vrzLADbmYQaionwg5sDW3P6oaM5D3tdezXMm7z1T+B+twIDAQABMIC-Info: RSA-MD5,RSA,AHxm/u6lqdt8X6gebNqy9afC2kLXg+GVIolG/Vrrw/dTCPGwM15+hT6AZMfDSvFZ YVPEaPjyiqB4rV/GS2lj6A==<SEC-document>0001193125-07-200376.txt : 20070913<SEc-header>0001193125-07-200376.hdr.sgml : 20070913<ACCEPTANCE-DATETIME>20070913115715ACCESSION NUMBER:       0001193125-07-200376CONFORMED SUBMISSION TYPE:  10-KPUBliC document COUNT:      7CONFORMED PERIOD OF REPORT: 20070630fileD AS OF DATE:       20070913DATE AS OF CHANGE:      20070913

和第一个<在这种情况下直到第51行(并且在所有情况下都不是51). xml部分如下所示:

</SEc-header><document><TYPE>10-K<SEQUENCE>1<filename>d10k.htm<DESCRIPTION>FORM 10-K<TEXT><HTML><head><Title>Form 10-K</Title></head> <BODY BGcolor="WHITE"><h5 align="left"><a href="#toc">table of Contents</a></h5>

我可以使用lxml动态处理吗?或者我应该使用流编辑器来省略每个文件的标题?谢谢!

这是我当前的代码和错误.

from lxml import etreef = etree.parse('temp.txt')XMLSyntaxError: Start tag expected,'<' not found,line 1,column 1

编辑:

FWIW,这里是file的链接.

解决方法 鉴于这些文件有一个标准,可以编写一个合适的解析器而不是猜测事物,或希望beautifulsoup能够把事情弄清楚.这并不意味着它对你来说是最好的答案,但它肯定是看起来的工作.

根据http://www.sec.gov/info/edgar/pdsdissemspec910.pdf的标准,您所拥有的(在PEM机箱内)是由提供的DTD定义的SGML文档.所以,首先转到第48-55页,在那里提取文本,并将其保存为“edgar.dtd”.

我要做的第一件事是安装SP并使用它的工具来确保文件确实有效并且可以被DTD解析,以确保你不会浪费大量时间在不会泛的东西上出.

Python附带了一个验证的SGML解析器sgmllib.不幸的是,它从未完全完成,并且在2.6-2.7中被弃用(并在3.x中删除).但这并不意味着它不起作用.所以,试一试,看看它是否有效.

如果没有,我不知道Python有什么好的选择;大多数SGML代码都是C,C或Perl.但是你可以很容易地包装任何C或C库(我从SP开始),只要你习惯用C/C++ython / boost-python /无论使用ctypes编写自己的包装.您只需要包装顶级函数,而不是构建一组完整的绑定.但如果你以前从未做过这样的事情,那可能不是最好的学习时间.

或者,您可以包装命令行工具. SP附带nsgmls.还有另一个用perl编写的同名工具(我认为是http://savannah.nongnu.org/projects/perlsgml/的一部分,但我不是肯定的.)还有其他几十种工具.

或者,当然,您可以在perl(或C)而不是Python中编写整个内容,或仅编写解析层.

总结

以上是内存溢出为你收集整理的使用lxml解析Python中带有错误标题的文本文件全部内容,希望文章能够帮你解决使用lxml解析Python中带有错误标题的文本文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存