字符串中隐藏的 unicode 字符集
Set of hidden unicode characters in a string
一些隐藏的 Unicode 字符集出现在需要删除的字符串中。
我有一个非常大的文本,它是使用 PyPDF2 包从 PDF 文件中提取的。现在这个提取的文本有很多问题(比如 PDF 中表格中的文本在提取时会随机出现)并且很多特殊字符也嵌入其中(比如 ~~~~~~~, }}} }}}}} 等),尽管这些文本在作为 PDF 文件查看时不存在。我尝试使用 this, this and this link 中描述的解决方案删除这些字符,但问题仍然出现
myText = "There is a set of hidden character here => <= but it will get printed in console"
print(myText)
现在我想要一个没有那些隐藏字符的干净文本。
字符 \x7f
是 ascii character DEL,这解释了为什么您的尝试没有奏效。要删除所有 "special" 个 ascii 字符,请使用此代码:
bytes.decodedocumentation.
请看这里
import string
a = b'There is a set of hidden character here =>\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f <= but i will get printed in console'
print(repr(a))
print(repr(''.join(i for i in a.decode('ascii', 'ignore') if i in string.printable)))
或者这个如果你不想导入字符串:
a = b'There is a set of hidden character here =>\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f <= but i will get printed in console'
print(repr(a))
print(repr(''.join(i for i in a.decode('ascii', 'ignore') if 31 < ord(i) < 127 or i in '\r\n')))
一些隐藏的 Unicode 字符集出现在需要删除的字符串中。
我有一个非常大的文本,它是使用 PyPDF2 包从 PDF 文件中提取的。现在这个提取的文本有很多问题(比如 PDF 中表格中的文本在提取时会随机出现)并且很多特殊字符也嵌入其中(比如 ~~~~~~~, }}} }}}}} 等),尽管这些文本在作为 PDF 文件查看时不存在。我尝试使用 this, this and this link 中描述的解决方案删除这些字符,但问题仍然出现
myText = "There is a set of hidden character here => <= but it will get printed in console"
print(myText)
现在我想要一个没有那些隐藏字符的干净文本。
字符 \x7f
是 ascii character DEL,这解释了为什么您的尝试没有奏效。要删除所有 "special" 个 ascii 字符,请使用此代码:
bytes.decodedocumentation.
请看这里import string
a = b'There is a set of hidden character here =>\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f <= but i will get printed in console'
print(repr(a))
print(repr(''.join(i for i in a.decode('ascii', 'ignore') if i in string.printable)))
或者这个如果你不想导入字符串:
a = b'There is a set of hidden character here =>\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f <= but i will get printed in console'
print(repr(a))
print(repr(''.join(i for i in a.decode('ascii', 'ignore') if 31 < ord(i) < 127 or i in '\r\n')))