python split()方法_秘籍:10个Python字符串处理技巧(附代码)
作者:馬修·梅奧
翻譯:陳之炎
校對:和中華
本文約1600字,建議閱讀7分鐘。
本文為你介紹利用Python處理字符串的一些基本操作。
在探尋文本分析途徑時卻不知從何下手,該怎么辦?那么可以通過這個字符串處理入門教程,來了解一下利用Python處理字符串的一些基本操作。
當前,自然語言處理和文本分析是研究和應用的熱點領域。這些領域包括各種具體的技能和概念,在深入具體實踐之前需要對它們有徹底的理解,為此,必須掌握一些基本的字符串操作和處理技巧。
在我看來,必須掌握兩種字符串處理技巧:首先是正則表達式,一種基于模式的文本匹配方法。關于正則表達式有許多精彩的介紹,但是喜歡通過視頻學習的朋友仍然可以從這個視頻中受益良多:
fast.ai代碼 -初涉自然語言處理:
https://youtu.be/Q1zLqfnEXdw?list=PLtmWHNX-gukKocXQOkQjuVxglSDYWsSh9&t=630
另一個必備的字符串處理技能是:能夠利用給定編程語言的標準庫進行基本的字符串操作。為此,本文便是一個簡短的Python字符串處理入門教程,旨在為那些以文本分析作為職業的人士尋求更為深入的研究,拋磚引玉。
想對公司所有的文本有深入理解,發掘出其中的價值嗎?首先,應了解最基本的基礎知識,下面,來了解一下這些初學者的技巧。
注意,有實際意義的文本分析遠遠超出字符串處理的范疇,那些更先進的核心技術可能不需要你頻繁的親自對文本進行操作。然而,對于一個成功的文本分析項目來說,文本數據預處理是非常重要而耗時的環節,所以,本文涵蓋的字符串處理技能將很有價值。在基礎層面上理解文本的計算處理對于理解更為先進的文本分析技術同樣重要。
文中的一些示例使用Python標準庫:string module字符串模塊,為此,最好準備好string module以備參考。
string module字符串模塊鏈接:
https://docs.python.org/2/library/string.html
1. 空格剝離
空格剝離是字符串處理的一種基本操作,可以使用lstrip()方法(左)剝離前導空格,使用rstrip()(右)方法對尾隨空格進行剝離,以及使用strip()剝離前導和尾隨空格。
s = ' This is a sentence with whitespace. 'print('Strip leading whitespace: {}'.format(s.lstrip()))print('Strip trailing whitespace: {}'.format(s.rstrip()))print('Strip all whitespace: {}'.format(s.strip()))
Strip leading whitespace: This is a sentence with whitespace.Strip trailing whitespace: This is a sentence with whitespace.Strip all whitespace: This is a sentence with whitespace.對剝離除空格以外的字符感興趣嗎?同樣的方法也很有用,可以通過傳遞想要剝離的字符來剝離字符。
s = 'This is a sentence with unwanted characters.AAAAAAAA'print('Strip unwanted characters: {}'.format(s.rstrip('A')))Strip unwanted characters: This is a sentence with unwanted characters.必要時不要忘記檢查字符串 format()文檔。
format()文檔:
https://docs.python.org/3/library/stdtypes.html#str.format
2. 字符串拆分
利用Python中的 split() 方法可以輕易將字符串拆分成較小的子字符串列表。
split() 方法:
https://docs.python.org/3/library/stdtypes.html#str.split
s = 'KDnuggets is a fantastic resource'print(s.split())['KDnuggets', 'is', 'a', 'fantastic', 'resource']默認情況下,split()根據空格進行拆分,但同樣也可以將其他字符序列傳遞給split()進行拆分。
s = 'these,words,are,separated,by,comma'print('',' separated split -> {}'.format(s.split(',')))s = 'abacbdebfgbhhgbabddba'print(''b' separated split -> {}'.format(s.split('b')))',' separated split -> ['these', 'words', 'are', 'separated', 'by', 'comma']'b' separated split -> ['a', 'ac', 'de', 'fg', 'hhg', 'a', 'dd', 'a']3. 將列表元素合成字符串
需要實現上述操作的一個逆向操作?沒問題,利用Python中的join()方法便可將列表中的元素合成一個字符串。
join()方法:
https://docs.python.org/3/library/stdtypes.html#str.join
s = ['KDnuggets', 'is', 'a', 'fantastic', 'resource']print(' '.join(s))KDnuggets is a fantastic resource事實果真如此!如果想將列表元素用空格以外的東西連接起來?這可能有點陌生,但也很容易實現。
s = ['Eleven', 'Mike', 'Dustin', 'Lucas', 'Will']print(' and '.join(s))Eleven and Mike and Dustin and Lucas and Will4. 字符串反轉
Python沒有內置的字符串反轉方法。但是,可以先將字符串看做是字符的列表,再利用反轉列表元素的方式進行反轉。
5. 大小寫轉換
利用upper(), lower(),和swapcase()方法可以進行大小寫之間的轉換。
upper()方法:
https://docs.python.org/3/library/stdtypes.html#str.upper
lower()方法:
https://docs.python.org/3/library/stdtypes.html#str.lower
swapcase()方法:
https://docs.python.org/3/library/stdtypes.html#str.swapcase
s = 'KDnuggets'print(''KDnuggets' as uppercase: {}'.format(s.upper()))print(''KDnuggets' as lowercase: {}'.format(s.lower()))print(''KDnuggets' as swapped case: {}'.format(s.swapcase()))'KDnuggets' as uppercase: KDNUGGETS'KDnuggets' as lowercase: kdnuggets'KDnuggets' as swapped case: kdNUGGETS6. 檢查是否有字符串成員
在Python中檢查字符串成員的最簡單方法是使用in運算符,語法與自然語言非常類似。
s1 = 'perpendicular's2 = 'pen's3 = 'pep'print(''pen' in 'perpendicular' -> {}'.format(s2 in s1))print(''pep' in 'perpendicular' -> {}'.format(s3 in s1))'pen' in 'perpendicular' -> True'pep' in 'perpendicular' -> False如果對找到字符串中子字符串的位置更感興趣(而不是簡單地檢查是否包含子字符串),則利用find()方法可能更為有效。
s = 'Does this string contain a substring?'print(''string' location -> {}'.format(s.find('string')))print(''spring' location -> {}'.format(s.find('spring')))'string' location -> 10'spring' location -> -1默認情況下,find()返回子字符串第一次出現的第一個字符的索引,如果找不到子字符串,則返回-1。對這一默認情況拿捏不準時,可以查閱一下相關文檔。
7. 子字符串替換
找到子字符串之后,如果想替換這一子字符串,該怎么辦?Python 中的replace()字符串方法將解決這一問題。
replace()字符串方法:
https://docs.python.org/3/library/stdtypes.html#str.replace
s1 = 'perpendicular's2 = 'pen's3 = 'pep'print(''pen' in 'perpendicular' -> {}'.format(s2 in s1))print(''pep' in 'perpendicular' -> {}'.format(s3 in s1))'pen' in 'perpendicular' -> True'pep' in 'perpendicular' -> False如果同一個子字符串出現多次的話,利用計數參數這一選項,可以指定要進行連續替換的最大次數。
8. 組合多個列表的輸出
如何以某種元素的方式將多個字符串列表組合在一起?利用zip()函數便沒問題。
zip()函數:
https://docs.python.org/3/library/functions.html#zip
s = 'Does this string contain a substring?'print(''string' location -> {}'.format(s.find('string')))print(''spring' location -> {}'.format(s.find('spring')))'string' location -> 10'spring' location -> -19. 同字母異序詞檢查
想檢查一對字符串中,其中一個字符串是否是另一個字符串的同字母異序詞?從算法上來講,需要做的是對每個字符串中每個字母的出現次數進行計數,再檢查二者計數值是否相等,直接使用collections模塊的Counter類便可實現。
collections模塊的Counter類:
https://docs.python.org/3/library/collections.html#collections.Counter
from collections import Counterdef is_anagram(s1, s2): return Counter(s1) == Counter(s2)s1 = 'listen's2 = 'silent's3 = 'runner's4 = 'neuron'print(''listen' is an anagram of 'silent' -> {}'.format(is_anagram(s1, s2)))print(''runner' is an anagram of 'neuron' -> {}'.format(is_anagram(s3, s4)))'listen' an anagram of 'silent' -> True'runner' an anagram of 'neuron' -> False10. 回文檢查
如果想檢查給定的單詞是否是回文,怎么辦?從算法上看,需要創建一個單詞的反轉,然后利用 == 運算符來檢查這2個字符串(原始字符串和反向字符串)是否相等。
def is_palindrome(s): reverse = s[::-1] if (s == reverse): return True return Falses1 = 'racecar's2 = 'hippopotamus'print(''racecar' a palindrome -> {}'.format(is_palindrome(s1)))print(''hippopotamus' a palindrome -> {}'.format(is_palindrome(s2)))
'racecar' is a palindrome -> True'hippopotamus' is a palindrome -> False雖然掌握這些字符串處理“技巧”之后,并不意味著你已經成為了文本分析或自然語言處理專家,但這些技巧可能會激發出深入探究自然語言處理領域的興趣,并掌握最終成為專家所必備的技能。
相關文獻:
文本數據預處理:Python演練https://www.kdnuggets.com/2018/03/text-data-preprocessing-walkthrough-python.html
Python中的·文本預處理:步驟、工具和示例https://www.kdnuggets.com/2018/11/text-preprocessing-python.html
文本數據分析完整探索與可視化:可視化與NLP相結合https://www.kdnuggets.com/2019/05/complete-exploratory-data-analysis-visualization-text-data.html
原文標題:
10 Python String Processing Tips & Tricks
原文鏈接:
https://www.kdnuggets.com/2020/01/python-string-processing-primer.html
譯者簡介
陳之炎,北京交通大學通信與控制工程專業畢業,獲得工學碩士學位,歷任長城計算機軟件與系統公司工程師,大唐微電子公司工程師,現任北京吾譯超群科技有限公司技術支持。目前從事智能化翻譯教學系統的運營和維護,在人工智能深度學習和自然語言處理(NLP)方面積累有一定的經驗。業余時間喜愛翻譯創作,翻譯作品主要有:IEC-ISO 7816、伊拉克石油工程項目、新財稅主義宣言等等,其中中譯英作品“新財稅主義宣言”在GLOBAL TIMES正式發表。能夠利用業余時間加入到THU 數據派平臺的翻譯志愿者小組,希望能和大家一起交流分享,共同進步。
—完—
關注清華-青島數據科學研究院官方微信公眾平臺“ THU數據派 ”及姊妹號“ 數據派THU ”獲取更多講座福利及優質內容。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的python split()方法_秘籍:10个Python字符串处理技巧(附代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: json schema如何约束为小数_如
- 下一篇: ajax get请求_JSP中的对讲机A