从.txt文件中移除ASCII编码的二进制块
我想解析10-K文件(公司的财务报表)。你可以在这里找到苹果公司的例子(找一下.txt文件)。我在阅读一篇研究论文(看第30-31页),里面讲了如何解析这些文件。第一步是去掉所有的ASCII编码段……我想知道怎么去掉它们。
我在StackOverflow上看到很多关于如何去掉非ASCII代码的问题,但这次的情况不一样。ASCII编码段是指:所有带有<TYPE>
标签的文档段落,类型包括GRAPHIC
、ZIP
、EXCEL
和PDF
- 我想把它们删除。
所以如果我加载一个txt文件,如下所示:
fil = open('F:\\file.txt','r')
x = fil.read()
我该如何从这个txt文件中删除所有ASCII编码段呢?我用这里的方法去掉HTML标签,但ASCII编码段该怎么处理呢?
1 个回答
如果我理解得没错,你正在处理的格式和SEC EDGAR流程有点关系。
我没有专门去查这个,或许你可以去了解一下。
从你提供的苹果声明来看,你似乎想用一个正则表达式 <DOCUMENT>\s*<TYPE>(?:GRAPHIC|ZIP|EXCEL|PDF).*?</DOCUMENT>
来替换掉任何匹配的内容,换成空字符串。
免责声明: 正确的做法是使用XML解析器,提取你想要的元素,而不是试图用简单的方法去删除你不想要的内容。在 lxml
中,这应该不难。
我最开始以为这是 XBLR 格式,但其实不是。用 ETree
来解析时会抛出异常,因为某些元素的闭合标签(包括 <TYPE>
)似乎是可选的。最好的办法是先搞清楚这是什么格式(EDGAR网站上有几个规范,也许其中之一就是你需要的),然后找到一个合适的DTD,再从那里开始。
一旦你搞清楚了这些,你就可以看看如何用 XPath删除元素,也许还可以了解一下 如何在(lxml
) XPath中使用正则表达式。然后可能需要重新实现你已经用XML和XPath做过的其他提取操作。