Python删除无效ascii字符

2024-09-27 00:22:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近编写了一个脚本,从pdf中提取所有书签并将它们保存在docx文件中。它适用于90%的文件,但不幸的是,有些文件似乎与unicode有问题。在

我把书签列在这样的列表中:

[[u'3. Mechatronik f\xfcr Doppelkupplungsgetriebe, Sicherungshalter B, Sicherung 14 auf Sicherungshalter C', 2],
[u'4. Geber f\xfcr Getriebeeingangsdrehzahl, Hydraulikdruckgeber 1 f\xfcr automatisches Getriebe, Magnetventil 2, Magnetventil \x04, Magnetventil 5', 2],
[u'5. W\xe4hlhebel, Schalter f\xfcr W\xe4hlhebel in P gesperrt, Magnet f\xfcr W\xe4hlhebelsperre', 2], 
[u'6. W\xe4hlhebel, Geber 2 f\xfcr Antriebswellendrehzahl, W\xe4hlhebel-Positionsanzeige', 2]]

当我试图运行函数时,我得到了一个错误:

^{pr2}$

代码:

from docx import Document

list1 = [[u'3. Mechatronik f\xfcr Doppelkupplungsgetriebe, Sicherungshalter B, Sicherung 14 auf Sicherungshalter C', 2],
    [u'4. Geber f\xfcr Getriebeeingangsdrehzahl, Hydraulikdruckgeber 1 f\xfcr automatisches Getriebe, Magnetventil 2, Magnetventil \x04, Magnetventil 5', 2],
    [u'5. W\xe4hlhebel, Schalter f\xfcr W\xe4hlhebel in P gesperrt, Magnet f\xfcr W\xe4hlhebelsperre', 2],
    [u'6. W\xe4hlhebel, Geber 2 f\xfcr Antriebswellendrehzahl, W\xe4hlhebel-Positionsanzeige', 2]]

def save_docx(list1):
document = Document('default.docx')
file = open("Error_Log.txt", 'w')
for i in list1:
    try:
        p = document.add_paragraph()
        p.add_run(i[0]).bold = True
    except Exception as e:
        file.write(repr(e) + '\n')
file.close()
document.save('Bookmarks.docx')

save_docx(list1)

我猜问题是\x0,但我不知道如何在不破坏整个文档的情况下删除这样的部分。 我尝试过不同的编码和其他任何我能在网上找到的东西,但到目前为止没有任何效果。在

任何帮助都将不胜感激!在


Tags: 文件insavedocumentfiledocx书签list1
1条回答
网友
1楼 · 发布于 2024-09-27 00:22:38

您的假设似乎是正确的:\x04是一个控制字符,并且您的错误消息明确指出不允许使用控件。在

在将控制字符添加到文档之前,可以从字符串中筛选出控制字符,这样可以解决问题。这可以通过Python的unicodedata module,特别是{}来实现。要排除的类别以“C”(来自http://www.unicode.org/reports/tr44/#GC_Values_Table)开头,它包含所有控制字符。在

以下内容应该可以代替当前的add_run行:

line = filter(lambda c: unicodedata.category(c)[0] != 'C', i[0])
p.add_run(line).bold = True

另外,在unicode字符串中包含unicode字符的典型方法是使用\uxxx,而不是\xXX(其中XXXX是unicode代码点的十六进制)。在

相关问题 更多 >

    热门问题