問題:
成都創(chuàng)新互聯(lián)公司長期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為天祝藏族自治企業(yè)提供專業(yè)的成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),天祝藏族自治網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
過濾用戶輸入中前后多余的空白字符
‘ ++++abc123--- ‘
過濾某windows下編輯文本中的’\r’:
‘hello world \r\n’
去掉文本中unicode組合字符,音調(diào)
"Zhào Qián Sūn Lǐ Zhōu Wú Zhèng Wáng"
如何解決以上問題?
去掉兩端字符串: strip(), rstrip(),lstrip()
123456789101112131415
#!/usr/bin/python3 s = ' -----abc123++++ ' # 刪除兩邊空字符print(s.strip()) # 刪除左邊空字符print(s.rstrip()) # 刪除右邊空字符print(s.lstrip()) # 刪除兩邊 - + 和空字符print(s.strip().strip('-+'))
刪除單個固定位置字符: 切片 + 拼接
123456
#!/usr/bin/python3 s = 'abc:123'# 字符串拼接方式去除冒號new_s = s[:3] + s[4:]print(new_s)
刪除任意位置字符同時刪除多種不同字符:replace(), re.sub()
1234567891011
#!/usr/bin/python3 # 去除字符串中相同的字符s = '\tabc\t123\tisk'print(s.replace('\t', '')) import re# 去除\r\n\t字符s = '\r\nabc\t123\nxyz'print(re.sub('[\r\n\t]', '', s))
同時刪除多種不同字符:translate() py3中為str.maketrans()做映射
1234567
#!/usr/bin/python3 s = 'abc123xyz'# a _ x, b_ y, c_ z,字符映射加密print(str.maketrans('abcxyz', 'xyzabc'))# translate把其轉(zhuǎn)換成字符串print(s.translate(str.maketrans('abcxyz', 'xyzabc')))
去掉unicode字符中音調(diào)
12345678910111213141516171819202122232425
#!/usr/bin/python3 import sysimport unicodedatas = "Zhào Qián Sūn Lǐ Zhōu Wú Zhèng Wáng"remap = { # ord返回ascii值 ord('\t'): '', ord('\f'): '', ord('\r'): None }# 去除\t, \f, \ra = s.translate(remap)'''通過使用dict.fromkeys() 方法構(gòu)造一個字典,每個Unicode 和音符作為鍵,對于的值全部為None然后使用unicodedata.normalize() 將原始輸入標準化為分解形式字符sys.maxunicode : 給出最大Unicode代碼點的值的整數(shù),即1114111(十六進制的0x10FFFF)。unicodedata.combining:將分配給字符chr的規(guī)范組合類作為整數(shù)返回。 如果未定義組合類,則返回0。'''cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c))) #此部分建議拆分開來理解b = unicodedata.normalize('NFD', a)''' 調(diào)用translate 函數(shù)刪除所有重音符'''print(b.translate(cmb_chrs))
針對這里的問題,我們可以先將文件名解碼成unicode,然后用gbk編碼,如果拋出異常,說明編碼失敗,即文件名中存在特殊字符。下面是一個小例子:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
file_names = ["??特殊字符.txt",
"沒有特殊字符.txt",
"????.txt"
]
for file_name in file_names:
try:
file_name.decode("utf-8").encode("gbk")
print file_name, "..."
except UnicodeEncodeError:
print file_name, "中獎"
"""outputs:
??特殊字符.txt 中獎
沒有特殊字符.txt ...
????.txt 中獎
"""
在python中strip函數(shù)的意思:移除字符串頭尾指定的字符(默認為空格或換行符)或字符序列。該方法只能刪除開頭或是結(jié)尾的字符,不能刪除中間部分的字符。
它的函數(shù)原型:string.strip(s[, chars]),它返回的是字符串的副本,并刪除前導(dǎo)和后綴字符。意思就是你想去掉字符串里面的哪些字符,那么你就把這些字符當參數(shù)傳入。此函數(shù)只會刪除頭和尾的字符,中間的不會刪除。
如果strip()的參數(shù)為空,那么會默認刪除字符串頭和尾的空白字符(包括\n,\r,\t這些)。注意刪除多個字符時,只要頭尾有對應(yīng)其中的某個字符即刪除,不考慮順序,直到遇到第一個不包含在其中的字符為止。
Python易混淆知識系列:Pandas字符串方法和字符串內(nèi)建函數(shù),使用Python的一個優(yōu)勢就是字符串處理起來比較容易。
Python的初學(xué)者在學(xué)習字符串內(nèi)建函數(shù)的時候往往會很困惑:字符串的內(nèi)建函數(shù)是對單個字符串對象處理,如果要對成千上萬個字符串對象處理該怎么辦?
不少已經(jīng)使用Python工作很長時間的同學(xué),即使已經(jīng)學(xué)會使用Pandas對象的.apply()方法來處理字符串,依然會時常忘記:其實Pandas已經(jīng)自帶功能強大的向量化字符串操作。
即使知道Pandas字符串方法的同學(xué),使用的時候也經(jīng)常與字符串內(nèi)建函數(shù)混淆。
而熟練使用Pandas字符串方法的同學(xué)往往會覺得,其方法的代碼簡潔性與運行效率都遠高于其他的寫法。真相到底如何?Pandas字符串方法和字符串內(nèi)建函數(shù)有什么不同?運算效率真的像傳聞那么高嗎?
今天我們就好好捋一下這塊Python易混淆的知識點。
1. 快速入門向量化字符串操作
初學(xué)Python字符串內(nèi)建函數(shù)的同學(xué)肯定知道有個叫.lower()的方法可以將字符串中的大寫英文字母轉(zhuǎn)化為小寫,比如將字符串對象’ABCD’轉(zhuǎn)化為小寫:
如果字符型的Series對象中的字符串要轉(zhuǎn)化為小寫呢?比如:
點擊添加圖片描述(最多60個字)
編輯
此時,我們就可以使用Series的str方法中的.lower()來處理:
點擊添加圖片描述(最多60個字)
編輯
同理,如果要將Series對象中的所有的大寫字母變成小寫,可以使用.str.upper()。
看到這里,相信很多沒有使用過Pandas字符串方法的同學(xué)會驚奇地發(fā)現(xiàn),這跟字符串對象的內(nèi)建函數(shù)差不多呀?只不過多了一個通過.str()方法調(diào)用函數(shù)的過程。
確實,大多數(shù)Pandas的字符串方法借鑒了Python字符串內(nèi)建函數(shù)的內(nèi)容,。
成年人的愛情不僅僅是簡單的我愛你和漂亮的新衣服。
上一篇: python3將兩個列表合并成字典
下一篇: python3 map()函數(shù)
1、strip方法去掉字符串兩邊(開頭和結(jié)尾)的空格
2、lstrip方法去掉字符串左邊的空格
3、rstrip方法去掉字符串右邊的空格
4、replace方法替換字符串的空格為空
注意: 這里說一下replace方法的具體用法
old_str:原字符串需要替換的內(nèi)容,new_str:將old_str替換成的內(nèi)容,max:代表替換的次數(shù),默認全部替換
5、正則匹配替換空格
正則方法的使用這里不多說了,自己查一下詳細文檔即可。
如果感覺本文對您有幫助可以點個贊哦
本文僅供交流學(xué)習,請勿用于非法途徑
僅是個人意見,如有想法,歡迎留言