2015-07-20 50 views
0

好了,所以這裏有一個簡短:刪除字符串的十六進制表示 - Python的

目的:檢測到一個字符串包含十六進制值,要麼正確提取或刪除它們。

問題:我希望能夠使用openpyxl編寫我的字符串到excel工作表,而不會引發非法字符異常錯誤。

樣品問題的字符串:

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

或者:

'5LVN\x03VWDWXV\x1d\x033RRU\x10ULVN\x1e\x03&\\WRJHQHWLFV\x1d\x03&RPSOH[\x03\x0b\xc2\x95\x03\x16\x03FORQDO\x03FKURPRVRPDO\x03DEQRUPDOLWLHV\x0c\x1e\x030RQRVRPDO\x03 

我曾嘗試:我試着寫之前檢查每一個元素,它是否是一個有效的字符串,由如果type(element) == str:isinstance(element) == unicode但不起作用。

我該如何解決這個問題?

的額外信息: 我做了什麼:

  1. 轉換PDF文件轉換爲XLS格式通過在互聯網上免費提供的軟件。 [不幸的是,該軟件只是聲稱其轉換爲XLS,當它實際上數據被寫入在XML]
  2. 現在,我把這些XML文件,寫一個解析器從中提取數據。
  3. 第三,我使用提取的數據並使用openpyxl包將其寫入Excel表。

回答

1

如果你看看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'> 
+0

如果該字符串是'UHVHFWLRQ◄QEVS▲♥/ RZ♥ULVN♥IHDWXUHV↔QEVS▲♥2OLJRGHQGURJOLRPD♥RU♥PL [HG'? – complextea

+1

然後它包含創建Excel文件之前需要轉義的無效字符。 –

+0

我怎麼能做到這一點?從上面註釋中的字符串中,我可以消除「心臟」或「三角形」等特殊符號,但由字母組成的垃圾字符串仍然存在。你能提出一些建議嗎? @Charlie Clark – complextea

0

這爲我工作:

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) 
相關問題