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

前端之家收集整理的这篇文章主要介绍了使用lxml解析Python中带有错误标题的文本文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想用lxml的etree解析文本文件(本地存储).但是我的所有文件(数千个)都有标题,例如:
-----BEGIN PRIVACY-ENHANCED MESSAGE-----
Proc-Type: 2001,MIC-CLEAR
Originator-Name: webmaster@www.sec.gov
Originator-Key-Asymmetric:
 MFgwCgYEVQgBAQICAf8DSgAwRwJAW2sNKK9AVtBzYZmr6aGjlWyK3XmZv3dTINen
 TWSM7vrzLADbmYQaionwg5sDW3P6oaM5D3tdezXMm7z1T+B+twIDAQAB
MIC-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>20070913115715
ACCESSION NUMBER:       0001193125-07-200376
CONFORMED SUBMISSION TYPE:  10-K
PUBLIC DOCUMENT COUNT:      7
CONFORMED PERIOD OF REPORT: 20070630
FILED AS OF DATE:       20070913
DATE 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 etree
f = 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中编写整个内容,或仅编写解析层.

原文链接:https://www.f2er.com/python/241905.html

猜你在找的Python相关文章