Python 如何从txt文件中删除奇怪的编码

Python 如何从txt文件中删除奇怪的编码,python,html,text,beautifulsoup,xbrl,Python,Html,Text,Beautifulsoup,Xbrl,我正在尝试处理如下文本文件: 如果您看到文件中间有如下内容: </TEXT> </DOCUMENT> <DOCUMENT> <TYPE>EXCEL <SEQUENCE>21 <FILENAME>Financial_Report.xlsx <DESCRIPTION>IDEA: XBRL DOCUMENT <TEXT> begin 644 Financial_Report.xlsx M4$L#!!0`!

我正在尝试处理如下文本文件:

如果您看到文件中间有如下内容:

</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>EXCEL
<SEQUENCE>21
<FILENAME>Financial_Report.xlsx
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
begin 644 Financial_Report.xlsx
M4$L#!!0`!@`(````(0!):[_C#0,``+!)```3``@"6T-O;G1E;G1?5'EP97-=
M+GAM;""B!`(HH``"````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M``````````````````````````````````````#,W,M.VT`4QO%]I;Z#Y6V5
M>([OK@@L>EFV2*4/,+4GQ,(W>08*;]^)N0BA%(2*U/^&B,2>\\6+G[+YSM')
M==\%5V:V[3AL0EFK,#!#/3;M<+X)?YY]795A8)T>&MV-@]F$-\:&)\?OWQV=
MW4S&!O[NP6["G7/3QRBR]<[TVJ['R0S^D^TX]]KY?^?S:-+UA3XW4:Q4'M7C
MX,S@5FY_1GA\]-EL]67G@B_7_NW;)+/I;!A\NKUP/VL3ZFGJVEH[GS2Z&IHG
M4U9W$];^SN4:NVLG^\''"*.#$_:?_'W`W7W?_:.9V\8$IWIVWW3O8T377?1[
MG"]^C>/%^OE##J0<M]NV-LU87_;^":SM-!O=V)TQKN_6R^NZU^UPG_N9^<O%
M-EI>Y(V#[+_?<O`K<\20'`DD1PK)D4%RY)`<!21'"<E107*(H@2AB"H44H5B
MJE!0%8JJ0F%5**X*!5:AR!I39(TILL8466.*K#%%UI@B:TR1-:;(&E-DC2FR
M)A19$XJL"476A")K0I$UH<B:4&1-*+(F%%D3BJPI1=:4(FM*D36ER)I29$TI
MLJ8465.*K"E%UI0B:T:1-:/(FE%DS2BR9A19,XJL&476C")K1I$UH\B:4V3-
M*;+F%%ESBJPY1=:<(FM.D36GR)I39,TILA8460N*K`5%UH(B:T&1M:#(6E!D
M+2BR%A19"XJL)476DB)K29&UI,A:4F0M*;*6%%E+BJPE1=:2(FM%D;6BR%I1
M9*THLE8462N*K!5%UHHB:T61M:+(*HI"JRB*K:(HN(JBZ"J*PJLHBJ^B*,"*
MH@@KBD*L*(RQH#H6QEA.(8O3R.)4LCB=+$XIB]/*XM2R,+TLP12S!-/,$DPU
M2S#=+,&4LP33SA),/4LP_2S!%+0$T]"2_U;1<GX?CHF6O__^`W8YYH6%+-;=
M=,:^\1*%VT-?FKS3LVE^N-EO#GKS`(_/?BZ'WZMS.H^3]1N&9O/ZIW"_0FA_
M]VKR!YG9M>9AB="A93P/$_UVHM</?+(-R.SW'S6F.3`[6O8M'?\!``#__P,`
M4$L#!!0`!@`(````(0"U53`C]0```$P"```+``@"7W)E;',O+G)E;',@H@0"

但并不是所有的东西都被删除了,而且我注意到在某些情况下甚至不是所有的html标记都被删除了。。有时,运行两次代码会删除比第一次运行BeautifulSoup代码时删除的内容更多的内容。

您正在查看的编码是。在Python中,您可以使用模块来解码这个blob,或者只需
stringdata.decode('uu')

uuencode
是一种传统格式,最初用于在电子邮件中嵌入二进制文件(当时只允许使用7位US-ASCII;该格式在与当时使用自己令人困惑的字符编码的大铁系统的互操作性方面也有一些让步)。现在,您可能希望在这个角色中看到
base64


它显示了如何在读取文件句柄或迭代一堆文本时删除uuencode BLOB。

使用此处提供的sed命令可以有效地解决此问题:

pandas提供了一种将Excel文件读入有用结构的方法。看见正如您所说,您必须小心使用此页面进行编码。看起来此文件格式是原始文件周围的XML包装,包含一些元数据字段,并以7位编码对有效负载进行编码。感谢tripleee,这非常有趣,我没有注意到uuencode。问题是我必须处理数百个这样的文件,我不知道每个文件中有多少这样的文件。有没有可能我会用Python自动跟踪并解码它们呢?据我所见,这些文件出现在.xlsx、.zip、.pdf、.jpg、.png等文件上。。如果我解码这些,我会得到什么?解码一个zip文件会得到zip文件中的二进制字节,Excel、PDF等也是如此。它是一种通用容器格式,因此无法准确预测它将包含什么(也不应该依赖文件扩展名,即使它通常是一个很好的提示)。如果省略
decoded
参数,则
uu
库将使用
begin
行中提供的文件名将解码内容写入磁盘。也许你会更喜欢这样。我想最好是去掉它们,但有没有一种方法可以通过编程实现呢?
begin
行后面是零行或多行固定长度的行,所有行的第一个字符都是
M
。最后一行数据可以更短,然后有不同的前缀,后面有两行,一行只包含
`
(backtick,ASCII 96),另一行只包含
end
。另请参阅我添加到anwer中的Wikipedia链接。不幸的是,这会一直删除到文件末尾,而不仅仅是uuencode blob的结尾。我担心示例是部分的。您可能希望XML结构能够继续,至少有一个结束的
标记,但更现实的是,有大量文档,其中许多文档也可能是UU编码的。点击EDGAR网站,看看它们到底是什么样子。我复制并粘贴了其中的任何内容。。可能示例是部分的,因为我以前使用Beautifulsoup删除html标记,这会导致删除部分UU编码??是的,您应该保留XML结构并使用Beautifulsoup遍历树,而不仅仅是丢弃树结构。然后,您也可以简单地丢弃一个
元素,该元素的主体以
开始6xx文件名
签名开头,然后继续下一个元素。好的,我不知道如何执行您所说的,但我会检查它。我对beautifulsoup所做的是:可能是错误的、不完整的或不合适的。如果可能的话,请随意提出一些替代方案。
from bs4 import BeautifulSoup

with open("textWithHtml.txt") as markup:
    soup = BeautifulSoup(markup.read())

with open("processedText.txt", "w") as f: 
    f.write(soup.get_text().encode('utf-8'))