我正在尝试从已被 redmon 拦截并通过管道传输到 python 程序的 postscript 文档中自动提取地址。我已经到了可以捕获 postscript 输出(并将其写入文件)的地步,但我被困在提取部分。
在 python 中是否有一种好的/可靠的方法可以做到这一点,或者我是否需要通过 ps2ascii 运行 postscript 文件并希望最好?
如果有其他语言的工具可以做到这一点,我很乐意评估它们。
我正在尝试从已被 redmon 拦截并通过管道传输到 python 程序的 postscript 文档中自动提取地址。我已经到了可以捕获 postscript 输出(并将其写入文件)的地步,但我被困在提取部分。
在 python 中是否有一种好的/可靠的方法可以做到这一点,或者我是否需要通过 ps2ascii 运行 postscript 文件并希望最好?
如果有其他语言的工具可以做到这一点,我很乐意评估它们。
实际上,在大多数情况下,只解析 Postscript 就足够了,因为 Postscript 文档是一个普通的文本文件。
澄清一下:是的,我知道 Postscript 文档显示的内容是一个程序的结果,该程序是用一种称为 Postscript 的漂亮反向或反向漂亮的语言编写的。然而,在大多数情况下,grep 程序源代码就足够了。在某些其他情况下,文本可能被编码为曲线或位图,并且除了对渲染输出进行 OCR 之外,将无法提取它。
底线:这取决于您要提取的信息类型以及后记文件的类型。在我看来,ps2ascii
这是一个很好的工具,也是解决问题的一种方法,但是(i)不能保证成功(可能比对源代码略多一点)(ii)在很大程度上只是剥离运算符和(iii ) 在某些情况下可能会导致文本丢失。
因为我评论了 ps2ascii 占用空间很大:这里有一个“80%”的解决方案,用于使用 python 提取出现在 postscript 文件中的字符串。
import fileinput
for line in fileinput.input():
for p in line.replace('\\(','EscapeLP').replace('\\)','EscapeRP').split('(')[1:]:
print p[:p.find(')')].replace('EscapeLP','(').replace('EscapeRP',')')
请注意,精细格式化(紧缩)的后记通常会将字符串分成小块(甚至是单个字符)。ps2ascii 很好地为您将它们拼凑在一起,而显然我的简单脚本不会。