从字符串中删除十六进制表示-Python

从字符串中删除十六进制表示-Python,python,excel,exception,pdf,openpyxl,Python,Excel,Exception,Pdf,Openpyxl,好的,这里有一个简短的介绍: 目标:检测字符串是否包含十六进制值,并正确提取或删除它们 问题:我希望能够使用openpyxl将字符串写入excel工作表,而不会引发非法字符异常错误 问题字符串示例: '\xc2\x87,QGLYLGXDO\x03ZLWK\x03EUHDVW\x03FDQFHU\x03\xc2\x9435 或: 我尝试的内容:我尝试在编写之前检查每个元素是否是有效字符串,方法是执行iftype(element)==str:或isinstance(element)==unicod

好的,这里有一个简短的介绍:

目标:检测字符串是否包含十六进制值,并正确提取或删除它们

问题:我希望能够使用openpyxl将字符串写入excel工作表,而不会引发非法字符异常错误

问题字符串示例:

'\xc2\x87,QGLYLGXDO\x03ZLWK\x03EUHDVW\x03FDQFHU\x03\xc2\x9435
或:

我尝试的内容:我尝试在编写之前检查每个元素是否是有效字符串,方法是执行if
type(element)==str:
isinstance(element)==unicode
,但没有效果

我如何解决这个问题

额外信息: 我所做的:

  • 通过互联网上的免费软件将PDF文件转换为xls格式。[不幸的是,当数据以xml写入时,该软件声称要将其转换为xls]
  • 现在,我获取这些xml文件并编写一个解析器从中提取数据
  • 第三,我使用提取的数据,并使用openpyxl包将其写入excel表格

  • 如果您查看openpyxl的源代码,您将发现负责检查是否允许使用字符的正则表达式,您可以使用它来检查字符串。似乎问题出在
    \x03
    。您可以从源代码中删除或转义这些字符

    import re
    ILLEGAL_CHARACTERS_RE = re.compile(r'[\000-\010]|[\013-\014]|[\016-\037]')
    m = ILLEGAL_CHARACTERS_RE.search(s)
    m
    <_sre.SRE_Match object; span=(12, 13), match='\x03'>
    
    重新导入
    非法字符\u RE=RE.compile(r'[\000-\010].[\013-\014].[\016-\037]')
    m=非法字符搜索
    M
    
    这对我很有用:

    e = "\x00\x03Rock\x04Is\x09 Cool"
    m = re.split('\s+', re.sub(r"[\x00-\x1F\x7F]", ' ', e))        
    result = ' '.join(m)
    print result
    
    样本输出:

    RockIsCool
    
    以下排除了除
    \x0b
    \x0c
    之外的大多数十六进制值,因为它们属于可打印字符

    e = filter(lambda x: x in string.printable, e)
    

    如果字符串是
    UHVHFWLRQ怎么办◄ 量化宽松▲♥/RZ♥乌尔文♥IHDWXUHV↔        量化宽松▲♥2OLJRGHQGURJOLRPD♥茹♥PL[HG
    ?然后它包含无效字符,您需要在创建Excel文件之前转义这些字符。我如何才能做到这一点?从上面注释中的字符串中,我可以删除特殊符号,如“心”或“三角形”,但由字母组成的垃圾字符串仍然存在。您能提出一些建议吗?@CharlieClarkYou可以简单地使用正则表达式来删除它们。主要问题是:例如:让有两个字符串A和B:A=我们有七大洲,B=上面的垃圾字符串。在这种情况下,我如何区分垃圾字母和真实字母?如果我写正则表达式,即使真实字母也会被删除,不是吗嗯?
    e = filter(lambda x: x in string.printable, e)