gpt4 book ai didi

python - 如何从作为二进制和其他形式内容容器的文件中分离内容

转载 作者:行者123 更新时间:2023-11-28 22:07:59 25 4
gpt4 key购买 nike

我正在尝试解析一些 .txt 文件。这些文件作为可变数量的“子”文件的容器,这些子文件在容器内用 SGML 标签标记或标识。使用 python,我可以轻松地分 ionic 文件。但是,我无法将二进制内容写回二进制文件(例如 gif 或 jpg)。在最简单的情况下,容器可能有一个嵌入的 html 文件,后跟一个由 html 调用的图形。我假设我的问题是因为我正在使用 open(filename,'r') 读取原始 .txt 文件。但这似乎是找到 sgml 标签来拆分文件的唯一选择。

如能帮助我确定一些相关的阅读 Material ,我将不胜感激。

我很欣赏这些建议,但我仍在努力解决最基本的问题。例如,当我用写字板打开文件并向下滚动到标记为 gif 的部分时,我看到了这个:

<FILENAME>h65803h6580301.gif
<DESCRIPTION>GRAPHIC
<TEXT>
begin 644 h65803h6580301.gif
M1TE&.#EA(P)I`=4@`("`@,#`P$!`0+^_OW]_?_#P\*"@H.#@X-#0T&!@8!`0
M$+"PL"`@('!P<)"0D#`P,%!04#\_/^_O[Y^?GZ^OK]_?WX^/C\_/SV]O;U]?

我可以很容易地找到该部分,但是 gif 文件从哪里开始。标题是否以 644 开头,单词开头后的空格还是以 MITE 开头的行?

接下来,当文件被读入 python 时,它是否对读回时必须撤消的二进制代码执行任何操作?

我可以找到图形开始的行:

filerefbin=file('myfile.txt','rb')
wholeFile=filerefbin.read()
import re
graphicReg=re.compile('<DESCRIPTION>GRAPHIC')
locationGraphics=graphicReg.finditer(wholeFile)
graphicsTags=[]
for match in locationGraphics:
graphicsTags.append(match.span())

我可以轻松地使用相同的过程到达单词的开头,或者识别文件名并到达“第一”行中文件名的末尾。我也成功地到达了嵌入式 gif 文件的末尾。但我似乎无法写出正确的事物组合,所以当我双击 h65803h6580301.gif 时,当它被隔离并保存时,我可以看到图形。

有趣的是,当我在 rb 中打开文件时,行结尾似乎仍然存在,即使它们在记事本中似乎没有任何效果。所以这显然是我的问题之一,我可能需要在剥离\n

后读取行并将行连接在一起

我喜欢这个网站,我也喜欢 PYTHON

当我读完 bendin 的帖子后,这太简单了。我只需要剪切以单词 begin 开头的部分并将其保存在 txt 文件中,然后运行以下命令:

import uu
uu.decode(r'c:\test2.txt',r'c:\test.gif')

在今天剩下的时间里,我必须处理一些其他的事情,但是当我更仔细地研究这个问题时,我会在这里发布更多内容。我需要发现的第一件事是如何使用文件以外的东西,那是因为我将整个 .txt 文件读入内存并剪掉包含图像的部分我需要使用剪裁的部分而不是写入它输出到 test2.txt。我相信这可以做到,只要弄清楚如何去做。

最佳答案

您看到的不是“二进制”,而是 uuencoded 。 Python 的标准库包括模块 uu , 处理 uuencoded 数据。

模块uu需要使用临时文件进行编码和解码。您可以通过使用 Python 的 codecs 来完成此操作而无需求助于临时文件。像这样的模块:

import codecs

data = "Let's just pretend that this is binary data, ok?"
uuencode = codecs.getencoder("uu")
data_uu, n = uuencode(data)
uudecode = codecs.getdecoder("uu")
decoded, m = uudecode(data_uu)

print """* The initial input:
%(data)s
* Encoding these %(n)d bytes produces:
%(data_uu)s
* When we decode these %(m)d bytes, we get the original data back:
%(decoded)s""" % globals()

关于python - 如何从作为二进制和其他形式内容容器的文件中分离内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/822161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com