Python-删除uuencoding行

2023-12-19

我正在处理许多文本文件,其中(其中一些)包含 uuencoding,可以是 .jpg 或 .pdf 或 .zip of .xlsx 等。我不关心嵌入的 UUencoded 数据,所以我只想丢弃这些段落并保留其余文本。我正在努力思考如何想出一种只跳过足够多但又不过多的方法。

总结一下http://en.wikipedia.org/wiki/Uuencoding http://en.wikipedia.org/wiki/Uuencoding每个斑点都以

begin 644 filename.extension

begin 644 之后的每一行似乎都以字母开头

M

所以这也可能有帮助。知道如何拥有一个删除文件夹(目录)中所有 .txt 文件的所有这些行的函数吗?

例如下面是.jpg uuencoding

GRAPHIC
18
g438975g32h99a01.jpg

begin 644 g438975g32h99a01.jpg
M_]C_X``02D9)1@`!`@$`8`!@``#_[0G64&AO;=&]S:&]P(#,N,``X0DE-`^T`
M`````!``8`````$``0!@`````0`!.$))300-```````$````'CA"24T$&0``
M````!````!XX0DE-`_,```````D```````````$`.$))300*```````!```X
M0DE-)Q````````H``0`````````".$))30/U``````!(`"]F9@`!`&QF9;@`&
M```````!`"]F9@`!`*&9F@`&```````!`#(````!`%H````&```````!`#4`
M```!`"T````&```````!.$))30/X``````!P``#_____________________
M________`^@`````_____________________________P/H`````/______
M______________________\#Z`````#_____________________________
M`^@``#A"24T$"```````$`````$```)````"0``````X0DE-!!X```````0`
M````.$))300:``````!M````!@``````````````)P```+`````&`&<`,P`R
M`&@`.0`Y`````0`````````````````````````!``````````````"P````
M)P`````````````````````````````````````````````X0DE-!!$`````
M``$!`#A"24T$%```````!`````(X0DE-!`P`````!SH````!````<````!D`
M``%0```@T```!QX`&``!_]C_X``02D9)1@`!`@$`2`!(``#_[@`.061O8F4`
M9(`````!_]L`A``,"`@("0@,"0D,$0L*"Q$5#PP,#Q48$Q,5$Q,8$0P,#`P,
M#!$,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,`0T+"PT.#1`.#A`4#@X.
M%!0.#@X.%!$,#`P,#!$1#`P,#`P,$0P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,
M#`P,#`S_P``1"``9`'`#`2(``A$!`Q$!_]T`!``'_\0!/P```04!`0$!`0$`
M`````````P`!`@0%!@<("0H+`0`!!0$!`0$!`0`````````!``(#!`4&!P@)
M"@L0``$$`0,"!`(%!P8(!0,,,P$``A$#!"$2,05!46$3(G&!,@84D:&Q0B;,D
M%5+!8C,T<H+10P)E\K.$P]-U
MX_-&)Y2DA;25Q-3D]*6UQ=7E]59F=H:6IK;&UN;V-T=79W>'EZ>WQ]?G]Q$`
M`@(!`@0$`P0%!@<'!@4U`0`"$0,A,1($05%A<2(3!3*!D12AL4(CP5+1\#,D
M8N%R@I)#4Q5C<S3Q)086HK*#!R8UPM)$DU2C%V1%539T9>+RLX3#TW7C\T:4
MI(6TE<34Y/2EM<75Y?569G:&EJ;:VQM;F]B

我想只剩下

GRAPHIC
18
g438975g32h99a01.jpg

有关背景,另请参阅我之前的问题如何从txt文件中删除奇怪的编码 https://stackoverflow.com/questions/28604776/how-to-remove-weird-encoding-from-txt-file

编辑:这是一个尝试

start_marker = '开始 644'

with open('fileWithBegin644.txt') as inf:
    ignoreLines = False
    for line in inf:
        if start_marker in line:
            print line,
            ignoreLines = True         
        if not ignoreLines:
    with open("strip_" + inf, "w") as f: 
        f.write(line.get_text().encode('utf-8'))

但我收到以下错误

  File "removeUuencodingFromAll.py", line 10
    with open("strip_" + inf, "w") as f: 
    ^
IndentationError: expected an indented block

我编写了一个本来应该是相当简单的生成器的代码。因为规范有点乏味(为什么在不同的行上有两个单独的结束标记?),所以它相当庞大,但就这样吧。它应该同时作为 uuencode 的验证器,但我只在非常有限的设置中测试了它。

import re

def unuuencode (iterator, collector=None, ignore_length_errors=False):
    """
    Yield lines from iterator except when they are in an uuencode blob.

    If collector is not None, append to it the uuencoded blobs as a list
    of a list of lines, one for each uuencoded blob.
    """
    state = None  # one of { None, 'in_blob', 'closing', 'closed' }
    collectitem = None
    regex = re.compile(r'^begin\s+[0-7]{3,6}\s+.*?(?:\r?\n)?$')

    for line in iterator:
        if state == None:
            if regex.match(line):
                if collector != None:
                    collectitem = [line]
                state = 'in_blob'
                continue
            else:
                yield line

        else:
            stripped = line.rstrip('\r\n')

            if state == 'in_blob' and line.startswith('`'):
                state = 'closing'

            if state == 'closing':
                if stripped != '`':
                    raise ValueError('Expected "`" but got "%s"' % line)
                state = 'closed'
            elif state == 'closed':
                if stripped != 'end':
                    raise ValueError('Expected "end" but got "%s"' % line)
                state = None
            else:
                expect = ord(line[0:1])-32
                actual = len(stripped)
                seen = (len(stripped)-1)*6/8
                if seen != expect:
                    if not ignore_length_errors:
                        raise ValueError('Wrong prefix on line: %s '
                            '(indicated %i, 6/8 %i, actual length %i)' % (
                                line, expect, seen, actual))
                if line[0:1] != 'M':
                    state = 'closing'

            if collectitem:
                collectitem.append(line)

            if state is None:
                if collectitem:
                    collector.append(collectitem)
                    collectitem = None

            continue

像这样使用它:

with open(file, 'r') as f:
    lines = [x for x in unuuencode(f)]

或者像这样:

with open(file, 'r') as f:
    blobs = []
    lines = [x for x in unuuencode(f, collector=blobs)]

或者像这样:

with open(file, 'r') as f:
    lines = f.read().split('\n')
# ... or whichever way you obtained your content as an array of lines
lines = [x for x in unuuencode(lines)]

或者在这种情况下您似乎正在使用的代码 https://stackoverflow.com/a/28608292/874188:

for fi in sys.argv[1:]:
    with open(fi) as markup:
        soup = BeautifulSoup(''.join(unuuencode(markup, ignore_length_errors=True)))
    with open("strip_" + fi, "w") as f:
        f.write(soup.get_text().encode('utf-8'))

The sample http://www.sec.gov/Archives/edgar/data/789019/000119312514289961/0001193125-14-289961.txt您链接到的第二个 uuencoded blob 中的长度指示符无效,因此我添加了一个选项来忽略它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python-删除uuencoding行 的相关文章

随机推荐

  • 找到Python解释器的完整路径?

    如何从当前执行的 Python 脚本中找到当前运行的 Python 解释器的完整路径 sys executable包含当前运行的Python解释器的完整路径 import sys print sys executable 现在是记录在这里
  • 将 PHP 实体(如 – 或 š)转换为其适用的字符

    有没有办法将 HTML 实体转换为其适用的字符 类似的东西html entity decode 我正在尝试从 TinyMCE 输出中制作没有 HTML 实体的普通文本 根据用户贡献的笔记 http de php net manual en
  • IE11 中的 http 伪流

    我有一些视频 我需要能够找到其中的各个点 而无需在该点之前下载整个视频 到目前为止 我使用带有 NodeJS 的 html5 视频标签和 vid streamer 模块 在 Firefox 和 Chrome 中运行得很好 然而 IE 11
  • 选择数组结束项的最有效方法?

    我正在寻找最有效的方法 即按下较小的键 来索引数组的最后一个元素 然后像 a lt c 1 2 3 n lt length a b lt a n 不应该使用 我想只使用一个命令 在上面的例子中我可以使用 b lt a length a 但我
  • Android 清除/完成之前的活动(除了一项)

    在android中我有以下路径 活动 1 gt 活动 2 gt 活动 3 gt 活动 N gt 按下按钮 当按下按钮时 我想清除 完成从活动 2 到 N 的所有活动 然后转到活动 X 换句话说 我想完成所有活动 直至最初的一个 然后移至另一
  • 在 R 中识别传单中栅格上的点击位置

    我正在绘制一个大型经纬度 NetCDFraster超过一个Rleaflet地图使用shinydashboard 当我单击地图时 会出现一个弹出窗口 显示行 列 经纬度位置和单击的栅格点的值 参见下面的可重现代码 问题是 如果栅格足够大 我会
  • 进度条无法使用带有 Angular cli 的 Service Worker

    我们正在开发 Angular 4 应用程序 并使用 cli 启用服务工作人员 一切都很好 除了文件上传进度条停留在 0 只有完成后才会达到 100 我们怀疑这是由于 Service Worker 造成的 因为我们在开发环境中没有看到它 奇怪
  • 如何使用gcloud命令行部署多个功能?

    我想部署多个云功能 这是我的index js const batchMultipleMessage require gcf 1 const batchMultipleMessage2 require gcf 2 module exports
  • 我可以请求 SQL Server 缓存某个结果集吗?

    某个查询正在从 ASP NET 页面调用 我在 Management Studio 中研究了该查询的执行计划 87 用于排序 我非常需要排序 否则显示的数据将毫无意义 无论如何 我是否可以请求 SQL Server 缓存排序的结果集 以便它
  • 是否可以在不知道c中数组长度的情况下使用gets?

    如果我们想在 c 中使用 gets 我们会这样做 int main void char str 100 while gets str printf s n str 我们必须先知道str的长度 即100 然后使用gets 是否可以在不知道c中
  • @Pattern 用于字母数字字符串 - Bean 验证

    我在 bean 中有一个变量名 我想添加 Pattern验证仅接受字母数字 目前 我有这个 NotNull Pattern regexp A Za z0 9 String name 但错误是Invalid regular expressio
  • 将 NSNumber 转换为 Float 时出现意外行为

    升级到 Xcode 9 3 9E145 后 我的应用程序显示了一些意外的行为 问题似乎在于将 NSNumber 转换为 Float 我用as为此类型转换运算符 请参阅以下示例 let n NSNumber init value 1 12 l
  • Web 操作系统实用吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是一名全职 Web 开发人员 但我的根源是桌面程序员 现在似乎有很多关于 Web 操作系统的讨论 将 Web 应用程序合并到 Web 操作系统
  • django.core.exceptions.ImproperlyConfigured:设置 SECRET_KEY 环境变量

    这个项目工作正常 直到我使用 environ 将 SECRET KEY 和 DEBUG 作为环境变量 当我收到此错误后 输出是 env E ecommercedj gt python manage py runserver Tracebac
  • 如何在(简单)有向图中强制形成直边?

    我有以下简单的有向图 digraph clientproxyserver Client gt Proxy label Request from Client Proxy gt Server label Forwarded Request S
  • 悬停时切换 CSS 颜色

    我正在尝试向这样的类添加突出显示颜色 common box hover function common box addClass hover me 这可行 但为什么不行 common box hover function common bo
  • 管道在kedro中找不到节点

    我正在关注管道教程 https kedro readthedocs io en latest 03 tutorial 04 create pipelines html 创建所有需要的文件 启动 kedrokedro run node pre
  • 捕获并打印完整的 Python 异常回溯,无需停止/退出程序

    我想捕获并记录异常而不退出 例如 try do stuff except Exception as err print Exception err I want to print the entire traceback here not
  • 生成一定范围内的“n”个唯一随机数[重复]

    这个问题在这里已经有答案了 我知道如何在 Python 中生成一定范围内的随机数 random randint numLow numHigh 我知道我可以将其放入循环中以生成 n 个数字 for x in range 0 n listOfN
  • Python-删除uuencoding行

    我正在处理许多文本文件 其中 其中一些 包含 uuencoding 可以是 jpg 或 pdf 或 zip of xlsx 等 我不关心嵌入的 UUencoded 数据 所以我只想丢弃这些段落并保留其余文本 我正在努力思考如何想出一种只跳过