【发布时间】:2010-10-23 18:10:29
【问题描述】:
我正在尝试解析一些 .txt 文件。这些文件充当可变数量的“子”文件的容器,这些“子”文件在容器内用 SGML 标记进行设置或标识。使用 python,我可以轻松地分离子文件。但是,我无法将二进制内容作为二进制文件(比如 gif 或 jpg)写回。在最简单的情况下,容器可能有一个嵌入的 html 文件,后跟一个由 html 调用的图形。我假设我的问题是因为我正在使用 open(filename,'r') 读取原始 .txt 文件。但这似乎是找到 sgml 标签来分割文件的唯一选择。
如果能帮我找出一些相关的阅读材料,我将不胜感激。
我很欣赏这些建议,但我仍在努力解决最基本的问题。例如,当我使用写字板打开文件并向下滚动到标记为 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。我相信只要弄清楚如何去做就可以做到。
【问题讨论】:
-
我认为如果它们嵌入了 JPEG,它们不应该被称为 .txt 文件。
-
好吧,它们不是我的文件,我可以随意重命名它们,但它们就是它们的本来面目
-
提示避免临时文件:docs.python.org/library/codecs.html 搜索 uu_codec
标签: python text encoding file binary