天天看點

Python基礎之字元串處理一 什麼是字元串二 字元串拼接三 字元串格式化四 字元串下标五 切片操作六 字元串常見操作七 轉義字元八 原生字元串九 字元串編碼和解碼十 Unicode字元串

一 什麼是字元串

1.在Python中,使用單引号或者雙引号括起來的,就是字元串。

2.字元串也可以使用六個單引号或者六個雙引号括起來。

3.在Python3中,字元串分為兩種類型,第一種是str,是unicode字元串,第二種是bytes,就是經過編碼後的字元串,是一種位元組碼,适用于儲存在磁盤上或者在網絡上傳輸。

二 字元串拼接

1.使用加号的形式

a = 'hello'
 b = 'world'
 c = a + b
 print(c)
           

2.使用格式化的形式

a = '___'
 b = 'abc'
 c = "%s%s%s" % (a,b,a)
           

三 字元串格式化

字元串格式化,是将一個字元串中某些經常可能會改變的地方,提取出來,用一些占位符占位,後面再通過格式化的方式填充進去。格式化字元串有兩種方式,第一種方式是使用%s的形式,第二種是使用format方法。

1. 使用%的形式

course = 'python'
school = 'zhiliao'
intro = "I love %s,I study in %s" % (course,school)
           

以上就是使用%的形式進行補充。當然針對不同的資料類型,應該使用不同的格式化:

  • 字元串:使用%s。
  • 整形:使用%d。
  • 浮點類型:使用%f。如果想要指定小數點後的位數。可以使用%.nf來表示,n為1表示一位小數,n為2表示2為小數,依次類推。

2. 使用format函數的形式

  • 使用位置參數占位符,示例代碼如下
  • 使用關鍵字參數占位符,示例代碼如下

四 字元串下标

下标操作:字元串實際上就是跟一個容器一樣,也可以跟清單和元組一樣進行下标操作。

示例代碼:

username = 'zhiliao'
    print(username[0])
    print(username[1])
    print(username[2])
    print(username[-1]) # 從後面開始
           

五 切片操作

  • 起始位置:切片操作包括開始位置。負數從後面開始,最後一個元素是-1。
  • 結束位置:切片操作包括的是結束位置前面的一個元素。負數從後面開始,最後一個元素是-1。
  • 步長:代表每次取值的跨度。如果沒有設定,預設為1。正數表示從左到右,負數表示從右到左。
  • 逆序:從後面往前開始走。是以起始位置應該是-1,然後要往前面走,那麼應該指定步長為-1,然後要取到所有的值,那麼結束位置應該留白。

六 字元串常見操作

1. find方法

傳回查找字元串的下标位置。如果傳回的是-1,代表的是沒有查找到該字元串。rfind是從右邊到左邊。

text = 'hello zhiliao'
position = text.find("zhiliao")
if position > 0:
	print('zhiliao在text中')
else:
	print('zhiliao不在text中')
           

2. index方法

和find非常類似。隻不過當查找不到這個字元串的時候,不是傳回-1,而是抛出一個異常。rindex是從右邊開始查找。

text = 'hello zhiliao'
position = text.index("python")
print(position)
           

3. len函數

擷取字元串字元的長度。

text = 'hello zhiliao'
length = len(text)
print(length)
           

4. count方法

用來擷取子字元串在原來字元串中出現的次數。

text = 'hello python python'
count = text.count('zhiliao')
print(count)
           

5. replace方法不會改變原來字元串的值

新建立一個字元串,把原來字元串中的某個字元串替換為你想要的字元串。

text = 'hello python python'
new_text = text.replace("python",'zhiliao',1)
print(text)
print(new_text)
           

6. split方法

按照給定的字元串進行分割。傳回的是一個清單。

text = 'hello python zhiliao'
words = text.split(" ")
for word in words:
	print(word)
           

7. startswith方法

判斷一個字元串是否以某個字元串開始。

text = 'hello python'
if text.startswith("h"):
	print("是以hello開頭的")
else:
	print('不是以hello開頭的')
           

8. endswith方法

判斷一個字元串是否以某個字元串結束。

text = 'hello python'
if text.endswith("python"):
	print("True")
else:
	print('False')
           

9. lower方法不會改變原來字元串

将字元串全部改成小寫。

text ='I am zhiliao'
new_text = text.lower()
print(text)
print(new_text)
           

10. upper方法不會改變原來字元串的值

将字元串全部改成大寫。

text ='I am zhiliao'
new_text = text.upper()
print(text)
print(new_text)
           

11. strip方法

将字元串左右的空格全部去掉。

text = '   python    '
new_text = text.strip()
print(text)
print(new_text)
           

12. lstrip方法

删除字元串左邊的空格。

text = '   python    '
new_text = text.strip()
print(text)
print(new_text)
           

13. partition方法

删除字元串右邊的空格。

text = 'hello python zhiliao'
result = text.partition("python")
print(result)
           

14. isalnum方法

從str出現的第一個位置起,把字元串string分成一個3元素的元組(string_pre_str,str,string_post_str),如果 string中不包含str,則string_pre_str == string。

text = 'zhiliao123.'
result = text.isalnum()
print(result)
           

15. isalpha方法

如果string至少有一個字元并且所有字元都是字母或數字則傳回True,否則傳回False。

text = 'hello12'
result = text.isalpha()
print(result)
           

16. isdigit方法

如果string至少有一個字元并且所有字元都是字母則傳回True,否則傳回False。

text = '123sbc'
result = text.isdigit()
print(result)
           

17. isspace方法

如果string隻包含數字則傳回True否則傳回 False。

result = text.isspace()
print(result)
           

18 isspace

如果字元串中隻包含空格,則傳回True,否則傳回False。

test="  "
print(test.isspace())
           

七 轉義字元

轉義字元 描述
\在行尾 續行符
\n 換行符
\’ 單引号
\" 雙引号
\t 制表符
\ 反斜杠

八 原生字元串

原始字元串不會對字元串中任何字元進行轉義,你寫了什麼東西,這個字元串就是什麼,達到一種所見即所得的效果。

文法:r’xxx’。

text = 'hello \
world'

print(text)


text = 'hello \nworld'
print(text)

text = "apple\"s\tprice is $9"
print(text)

text = '\\'
print(text)

# raw:原生
text = r'abc\ncde'
print(text)
           

九 字元串編碼和解碼

在Python3中,預設寫的字元串都是unicode類型,unicode是一個萬能的字元集,可以存儲任意的字元,但是unicode字元串隻能在記憶體中存在,不能在磁盤和網絡間傳輸資料,如果要在檔案或者網絡間傳輸資料,必須要将unicode轉換為bytes類型的字元串,是以我們在寫代碼的時候有時候要對unicode和bytes類型字元串進行轉換,轉換的函數如下:

  • encode(‘utf-8’):将unicode編碼成bytes類型,并且編碼方式采用的是utf-8。
  • decode(‘utf-8’):将bytes解碼成unicode類型,并且解碼的方式采用的是utf-8。
  • utf-8是編碼的方式,還有其他編碼方式,比如gbk、ascii等。
text = 'hello world'
# str
# unicode
# unicode -> bytes:encode
text_bytes = text.encode("utf-8")
print(text_bytes)
print(type(text_bytes))

# bypes->unicode: decode
text_bytes = b'hello world'
text = text_bytes.decode("utf-8")
print(text)
print(type(text))


from hashlib import md5
text = 'hello world'
result = md5(text.encode("utf-8")).hexdigest()
print(result)

with open("abc.txt",'w') as fp:
	fp.write("hello world")
           

十 Unicode字元串

1.什麼是unicode字元串

因為曆史原因,在Python2版本中,預設的字元串編碼采用的是ascii編碼(Python早于unicode釋出)。而ascii編碼是采用1個位元組來存儲,也就是8位,最多隻能表示28也即256個字元,這在全世界遠遠是不夠的,單拿中國漢字來講,常用的漢字也有6000多個。是以,為了滿足全球各個國家不同語言的編碼需求,全球統一碼聯盟提出了unicode編碼。unicode編碼預設情況下會采用2個位元組存儲字元(UCS-2),這樣能夠存儲的216也即65536個字元,但也還是不能滿足全世界所有語言,是以後來又補充了用4個位元組存儲(UCS-4),這就可以包含全球所有的文字了。

2.unicode與其他編碼的差別

  • unicode是一個字元集,相當于一個字典,全世界所有的字元或者标點符号都對應一個數字。以後要在計算機中顯示這個字元的時候,就使用unicode字元集中對應的那個數字就可以了。
  • utf-8、gbk、latin-1、ascii都是具體的編碼實作。 因為unicode中,将大部分的字元都用2個位元組存儲,但是對于英文字母,比如a,其實他隻需要一個位元組就夠了,如果都用2個位元組存儲,那麼比較浪費硬碟空間或者浪費流量,是以unicode并不适合用來存儲。而utf-8則是unicode的一種實作方式,他預設會使用8位,也就是一個位元組存儲,如果存儲不下了,則會動态的改變大小用來存儲字元。是以utf-8比較節省空間,并且也可以包含全世界所有的字元。

3. 在Python2中如何定義unicode字元串

在字元串的前面加上一個u,比如u’中國’。

4. unicode可以解決什麼問題

在出現亂碼或者編碼錯誤的時候可以解決問題。

5.如何将其他形式的編碼字元串解碼為unicode字元串

greet = '你好'
greet_unicode = greet.decode('utf-8')
           

6.如何将unicode編碼成其他編碼字元串

greet = u'你好'
greet_utf8 = greet.encode('utf-8')
           

7.sys的作用是什麼

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
           

設定字元串在轉換編碼時候的預設編碼。

比如使用函數unicode将一個str字元串轉換成unicode字元串,那麼預設使用的就是ascii編碼。如果你設定了以上的代碼,那麼将使用utf-8編碼。

8.#coding

utf-8是用來幹什麼的:用來設定Python解釋器在讀取這個源代碼檔案時候使用的編碼。在python2中預設使用ascii,是以需要改變一下檔案的預設編碼。而在python3中,預設使用了utf-8,則可以不要更改檔案編碼就可以支援中文了。