程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python學習4

編輯:Python

字符串

字符串常用方法

find()、rfind()、index()、rindex()、count()

find()和rfind()方法分別用來查找一個字符串在另一個字符串指定范圍(默認是整個字符串)中首次和最後一次出現的位置,如果不存在則返回-1;

index()和rindex()方法用來返回一個字符串在另一個字符串指定范圍中首次和最後一次出現的位置,如果不存在則拋出異常;

count()方法用來返回一個字符串在當前字符串中出現的次數。

>>> s="apple,peach,banana,peach,pear"
>>> s.find("peach")
6
>>> s.find("peach",7)
19
>>> s.find("peach",7,20)
-1
>>> s.rfind('p')
25
>>> s.index('p')
1
>>> s.index('pe')
6
>>> s.index('pear')
25
>>> s.index('ppp')
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
s.index('ppp')
ValueError: substring not found
>>> s.count('p')
5
>>> s.count('pp')
1
>>> s.count('ppp')
0

 split()、rsplit()、partition()、rpartition()

split()和rsplit()方法分別用來以指定字符為分隔符,把當前字符串從左往右或從右往左分隔成多個字符串,並返回包含分隔結果的列表;

partition()和rpartition()用來以指定字符串為分隔符將原字符串分隔為3部分,即分隔符前的字符串、分隔符字符串、分隔符後的字符串,如果指定的分隔符不在原字符串中,則返回原字符串和兩個空字符串。

>>> s = "apple,peach,banana,pear"
>>> s.split(",")
["apple", "peach", "banana", "pear"]
>>> s.partition(',')
('apple', ',', 'peach,banana,pear')
>>> s.rpartition(',')
('apple,peach,banana', ',', 'pear')
>>> s.rpartition('banana')
('apple,peach,', 'banana', ',pear')
>>> s = "2017-10-31"
>>> t = s.split("-")
>>> print(t)
['2017', '10', '31']
>>> print(list(map(int, t)))
[2017, 10, 31]

對於split()和rsplit()方法,如果不指定分隔符,則字符串中的任何空白符號(空格、換行符、制表符等)都將被認為是分隔符,並刪除切分結果中的空字符串。

>>> s = 'hello world \n\n My name is Dong '
>>> s.split()
['hello', 'world', 'My', 'name', 'is', 'Dong']
>>> s = '\n\nhello world \n\n\n My name is Dong '
>>> s.split()
['hello', 'world', 'My', 'name', 'is', 'Dong']
>>> s = '\n\nhello\t\t world \n\n\n My name\t is Dong '
>>> s.split()
['hello', 'world', 'My', 'name', 'is', 'Dong']

然而,明確傳遞參數指定split()使用的分隔符時,情況是不一樣的,會保留切分得到的空字符串。

>>> 'a,,,bb,,ccc'.split(',') #每個逗號都被作為獨立的分隔符
['a', '', '', 'bb', '', 'ccc']
>>> 'a\t\t\tbb\t\tccc'.split('\t') #每個制表符都被作為獨立的分隔符
['a', '', '', 'bb', '', 'ccc']
>>> 'a\t\t\tbb\t\tccc'.split() #連續多個制表符被作為一個分隔符
['a', 'bb', 'ccc']

split()和rsplit()方法還允許指定最大分割次數。

字符串連接join()

>>> li = ["apple", "peach", "banana", "pear"]
>>> ','.join(li)
'apple,peach,banana,pear'
>>> '.'.join(li)
'apple.peach.banana.pear'
>>> '::'.join(li)
'apple::peach::banana::pear'

lower()、upper()、capitalize()、title()、swapcase()

>>> s = "What is Your Name?"
>>> s.lower() #返回小寫字符串
'what is your name?'
>>> s.upper() #返回大寫字符串
'WHAT IS YOUR NAME?'
>>> s.capitalize() #字符串首字符大寫
'What is your name?'
>>> s.title() #每個單詞的首字母大寫
'What Is Your Name?'
>>> s.swapcase() #大小寫互換
'wHAT IS yOUR nAME?'

查找替換replace(),類似於Word中的“全部替換”功能。

>>> words = ('測試', '非法', '暴力', '話')
>>> text = '這句話裡含有非法內容'
>>> for word in words:
if word in text:
text = text.replace(word, '***')
>>> text
'這句***裡含有***內容'

字符串對象的maketrans()方法用來生成字符映射表,而translate()方法用來根據映射表中定義的對應關系轉換字符串並替換其中的字符,使用這兩個方法的組合可以同時處理多個字符。

#創建映射表,將字符"abcdef123"一一對應地轉換為"[email protected]#$"
>>> table = ''.maketrans('abcdef123', '[email protected]#$')
>>> s = "Python is a great programming language. I like it!"
>>> s.translate(table) #按映射表進行替換
'Python is u gryut progrumming lunguugy. I liky it!'

strip()、rstrip()、lstrip()

>>> s = " abc "
>>> s.strip() #刪除空白字符
'abc'
>>> '\n\nhello world \n\n'.strip() #刪除空白字符
'hello world'
>>> "aaaassddf".strip("a") #刪除指定字符
'ssddf'
>>> "aaaassddf".strip("af")
'ssdd'
>>> "aaaassddfaaa".rstrip("a") #刪除字符串右端指定字符
'aaaassddf'
>>> "aaaassddfaaa".lstrip("a") #刪除字符串左端指定字符
'ssddfaaa'

這三個方法的參數指定的字符串並不作為一個整體對待,而是在原字符串的兩側、右側、左側刪除參數字符串中包含的所有字符,一層一層地從外往裡扒。

>>> 'aabbccddeeeffg'.strip('af') #字母f不在字符串兩側,所以不刪除
'bbccddeeeffg'
>>> 'aabbccddeeeffg'.strip('gaf')
'bbccddeee'
>>> 'aabbccddeeeffg'.strip('gaef')
'bbccdd'
>>> 'aabbccddeeeffg'.strip('gbaef')
'ccdd'
>>> 'aabbccddeeeffg'.strip('gbaefcd')
''

成員判斷,關鍵字in

>>> "a" in "abcde" #測試一個字符中是否存在於另一個字符串中
True
>>> 'ab' in 'abcde'
True
>>> 'ac' in 'abcde' #關鍵字in左邊的字符串作為一個整體對待
False
>>> "j" in "abcde"
False

Python字符串支持與整數的乘法運算,表示序列重復,也就是字符串內容的重復,得到新字符串。

s.startswith(t)、s.endswith(t),判斷字符串是否以指定字符串開始或結束

>>> s = 'Beautiful is better than ugly.'
>>> s.startswith('Be') #檢測整個字符串
True
>>> s.startswith('Be', 5) #指定檢測范圍起始位置
False
>>> s.startswith('Be', 0, 5) #指定檢測范圍起始和結束位置
True
>>> import os
>>> [filename for filename in os.listdir(r'c:\\')
if filename.endswith(('.bmp','.jpg','.gif'))]

center()、ljust()、rjust(),返回指定寬度的新字符串,原字符串居中、左對齊或右對齊出現在新字符串中,如果指定寬度大於字符串長度,則使用指定的字符(默認為空格)進行填充。

>>> 'Hello world!'.center(20) #居中對齊,以空格進行填充
' Hello world! '
>>> 'Hello world!'.center(20, '=') #居中對齊,以字符=進行填充
'====Hello world!===='
>>> 'Hello world!'.ljust(20, '=') #左對齊
'Hello world!========'
>>> 'Hello world!'.rjust(20, '=') #右對齊
'========Hello world!'

isalnum()、isalpha()、isdigit()、isdecimal()、isnumeric()、isspace()、isupper()、islower(),用來測試字符串是否為數字或字母、是否為字母、是否為數字字符、是否為空白字符、是否為大寫字母以及是否為小寫字母。

>>> '1234abcd'.isalnum()
True
>>> '1234abcd'.isalpha() #全部為英文字母時返回True
False
>>> '1234abcd'.isdigit() #全部為數字時返回True
False
>>> 'abcd'.isalpha()
True
>>> '1234.0'.isdigit()
False
>>> '1234'.isdigit()
True
>>> '九'.isnumeric() #isnumeric()方法支持漢字數字
True
>>> '九'.isdigit()
False
>>> '九'.isdecimal()
False
>>> 'ⅣⅢⅩ'.isdecimal()
False
>>> 'ⅣⅢⅩ'.isdigit()
False
>>> 'ⅣⅢⅩ'.isnumeric() #支持羅馬數字
True

切片也適用於字符串,但僅限於讀取其中的元素,不支持字符串修改。

>>> 'Explicit is better than implicit.'[:8]
'Explicit'
>>> 'Explicit is better than implicit.'[9:23]
'is better than'

Pytho標准庫zlib中提供的compress()和decompress()函數可以用於字節串的壓縮和解壓縮。

>>> import zlib
>>> x = 'Python程序設計系列圖書,董付國編著'.encode()
>>> len(x)
48
>>> len(zlib.compress(x))
59

字符串常量

Python標准庫string中定義數字字符、標點符號、英文字母、大寫字母、小寫字母等常量。

>>> import string
>>> string.digits
'0123456789'
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~'
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

應用:密碼隨機生成

>>> import string
>>> characters = string.digits + string.ascii_letters
>>> import random
>>> ''.join([random.choice(characters) for i in range(8)])
'J5Cuofhy'
>>> ''.join([random.choice(characters) for i in range(10)])
'RkHA3K3tNl'
>>> ''.join([random.choice(characters) for i in range(16)])
'zSabpGltJ0X4CCjh'
>>> ''.join(random.choices(characters, k=12))
'4NvBiOqy0Ej1'

正則表達式

正則表達式使用某種預定義的模式去匹配一類具有共同特征的字符串,主要用於處理字符串,可以快速、准確地完成復雜的查找、替換等處理要求,在文本編輯與處理、網頁爬蟲之類的場合中有重要應用。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved