python中去掉字符串中的\xa0、\t、\n


\xa0 是不間斷空白符   
我們通常所用的空格是 \x20 ,是在標准ASCII可見字符 0x20~0x7e 范圍內。 
而 \xa0 屬於 latin1 (ISO/IEC_8859-1)中的擴展字符集字符,代表空白符nbsp(non-breaking space)。 
latin1 字符集向下兼容 ASCII ( 0x20~0x7e )。通常我們見到的字符多數是 latin1 的,比如在 MySQL 數據庫中。 
有如下信息:

'T-shirt\xa0\xa0短袖圓領衫,體恤衫\xa0,', 'V-neck\xa0\xa0V型領\xa0sleeve\xa0\xa0袖子\xa0,',

我們如何將其中的\xz0去掉呢,試了re模塊的sub方法,發現沒有作用,於是又開始查閱相關資料,終於解決了該問題。方法如下:

>>> inputstring = u'\n Door:\xa0Novum \t ' >>> move = dict.fromkeys((ord(c) for c in u"\xa0\n\t")) >>> output = inputstring.translate(move) >>> output ' Door:Novum '

 

另外還有一種更簡單的方法,利用split方法:

>>> s
'T-shirt\xa0\xa0短袖圓領衫,體恤衫\xa0' >>> out = "".join(s.split()) >>> out 'T-shirt短袖圓領衫,體恤衫'

 

可以發現利用translate方法、split()可以完美解決,並且還可以替換\t \n字符,由此又學到了新知識!

關於ord函數: 
ord()函數是chr()函數(對於8位的ASCII字符串)或unichr()函數(對於Unicode對象)的配對函數,它以一個字符(長度為1的字符串)作為參數,返回對應的ASCII數值,或者Unicode數值,如果所給的Unicode字符超出了你的Python定義范圍,則會引發一個TypeError的異常。

關於fromkeys方法: 
dict中的fromkeys方法目的是創建一個只有key的字典,內部利用for循環,使三個字符的asii碼值成為可迭代對象(本來的整數是不可迭代的),分別對其迭代,存入字典。

關於translate方法: 
Python translate() 方法根據參數table給出的表(包含 256 個字符)轉換字符串的字符, 要過濾掉的字符放到 del 參數中。接收到move返回的表(字典),之后對字符串進行替換。

join()方法: 
join(): 連接字符串數組。將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個新的字符串。可見該處用join方法真的是神來之筆,可謂絕妙!

值得注意的是,split方法中不帶參數時,表示分割所有換行符、制表符、空格。

 

轉載鏈接:https://blog.csdn.net/wangbowj123/article/details/78061618


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM