Python基礎學習參考(五):字符串和編碼

一. 字符串

前面已經介紹過字符串,經過單引號或者雙引號表示的一種數據類型。下面就再來進一步的細說一下字符串。字符串是不可變的,當你定義好之後就不能改變它了,能夠進一步的說,字符串是一種特殊的元組,元組沒有講到,後面會介紹,這裏只是提一下概念,總之,字符串是不可變的。python

1.特殊字符串

在字符串中有一些特殊字符,好比換行\n,製表符\t,回車\r,反斜槓\\等,對於這些特殊字符須要經過「\」反斜槓進行轉義,在字符串還涉及一個原始字符串操做符」r」和「R」,這是什麼意思呢?看下面代碼:git

a = r'abc\nabc\ta'
b = 'abc\nabc\ta'
print(a)
print(b)複製代碼

運行結果以下:
api


對於a變量雖然在定義的時候前面加了個「r」可是它依然是一個字符串,而且裏面的特殊字符串並無轉義直接打印出來了,原始字符串「r」做用就是將原來的字符串表示出來。而變量b只是定義了一個普通的字符串,在打印的時候\n,\t都進行了轉義。區別是否是很明顯了。

2.涉及內置方法

a.dir

Python在內置函數中有dir這樣一個方法,它的做用就是查看對象全部的屬性和方法,好比如今查看一下字符串涉及有哪些方法?bash

print(dir(str))複製代碼

經過print將所涉及的方法打印出來。結果我就不給你們展現了,不少不少方法。後面會挑一些經常使用的給你們介紹。微信

b.len

len()這個內置函數,就是用來計算長度的。舉例以下:app

a = "abc"
print("長度是:",len(a))複製代碼

最後輸出結果:「長度是: 3」。使用很簡單再也不贅述。函數

C.enumerate

對於enumerate()這個函數用於遍歷序列中的元素以及它們的位置下標,直接看例子:學習

a = "abc"
for n, i in enumerate(a):
    print(n,i)複製代碼

結果以下:優化


能夠看到,前面是位置,後面是字符。字符串a通過enumerate之後變成了一個帶位置索引的序列,經過for循環遍歷出每一個字符所在的位置和這個字符。後面介紹列表的時候還會使用到。

3.字符串方法

a.capitalize() 將字符串的首字母變爲大寫,其他的都爲小寫,例子:this

a = "green"
print(a.capitalize())複製代碼

結果本身驗證一下,看看「green」是否變爲了「Green」
b.title() 每一個單詞首字母大寫,例子:

a = "this is a apple"
print(a.title())複製代碼

結果:「This Is A Apple」
c.lower()和upper() 將字符串變爲所有小寫和大寫,例子:

a = "this is a apple"
print(a.upper())複製代碼

結果就不演示了,本身試一下。
d. swapcase() 反轉大小寫,用法跟上面都是同樣的,自行感覺一下
e.這裏面還有一波is判斷的方法:isnumeric()、isalpha()、isspace()、isalnum()、isdigit()、isdecimal()、islower()、istitle()、isprintable()、isupper()
選其中一個給你們舉個例子:

a = "1234"
print(a.isnumeric())複製代碼

運行結果:「True」說明字符串a都是由數字組成的,不然爲Flase。這些方法就是用來判斷的,返回的都是布爾類型。其餘方法根據函數名本身試一下。
f.count()用來統計字符串中某個子字符串出現的位置,而且能夠選開始和結束的位置。例子:

a = "lajdfljalsjfoiwejfsalfk"
print(a.count("al", 0, len(a)))複製代碼

結果爲:2,說明「al」字符串在a中出現了2次,在count中有三個參數,第一個參數是要統計的子字符串,第二個參數是開始統計的起始位置,默認爲0,從頭開始。第三個參數是統計的結束位置,不寫默認一直到最後。上面其實能夠改成:

a = "lajdfljalsjfoiwejfsalfk"
print(a.count("al"))複製代碼

結果是同樣的。
g.find()和rfind() 用來查找字符串中是否包含子字符串,若是包含,返回查找到第一個子字符串的位置,若是沒有查找到,返回-1,例子:

a = "lajdfljalsjfoiwejfsalfk"
print(a.find("al", 0, len(a)))複製代碼

結果爲:7,字符串「al」第一次出現的位置索引爲7。其中find的參數用法和count是同樣的。你們能夠本身改寫一下。rfind的用法和find差很少,他是查找子字符串出現的最後一次的位置。上面例子能夠之間將find變爲rfind試一下,看看結果有什麼不一樣。
h.index()和rindex() 用來查找字符串中是否包含子字符串,若是包含,返回查找到第一個子字符串的位置,若是沒有找到,拋出異常。index的用法和find是同樣的,惟一的不一樣是當沒有查找到的時候返回的結果是不同的。剩下用法徹底同樣,本身能夠經過上面的例子試一下。rindex和rfind()是對應的。
i. endswith() 和startswith()用來判斷字符串是否以指定的後綴結尾,若是以指定的後綴結尾返回True,不然返回False。例子:

a = "lajdfljalsjfoiwejfsalfk"
print(a.endswith("fk", 0, len(a)))複製代碼

返回結果:「True」說明字符串a是以「fk」結尾的,endswith()三個參數,後面兩個參數的用法跟count和find都是同樣的,再也不贅述了。startswith()固然就是用來判斷以什麼開頭的了。
j.replace() 將字符串中的某些字符替換爲另外字符,變成另外一個新的字符串(由於原字符串不可變)。例子:

a = "aljdfljalsjfoiwejfsalfk"
print(a.replace("al", "ZZZ", 2))複製代碼

結果以下:「ZZZjdfljZZZsjfoiwejfsalfk」。細心的同窗可能發現最後的「al」沒替換,只替換了兩個,這個時候第三個參數就發揮做用了,第三個參數就是用來限定被替換的次數的。例子中的第三個參數2表示最多替換2次。
k.strip(),lstrip()和rstrip() 用來清除字符串左右兩邊指定的字符(默認爲空格)。lstrip()只清除最左邊的,rstrip()只清除最右邊的。以strip()爲例:

a = "aaaabcdaaaaa"
print(a.strip("a"))複製代碼

運行結果爲:」bcd」。字符串a中的左右兩邊的字符「a」。
l.splite()和rsplite() 經過指定分隔符對字符串進行分隔,並返回一個分割後的列表。例子:

a = "lajdfljalsjfoiwejfsalfk"
print(a.split("al"))
print(a.split("al",1))複製代碼

運行結果:


經過上面例子對比,能夠看出splite中第二個參數表示要分割的次數,例子中的第二個參數1表示只分割1次。rsplite表示從右邊開始分割一直到結束,使用時候都帶有兩個參數,若是隻帶一個參數和splite用法同樣。例子:

a = "lajdfljalsjfoiwejfsalfk"
print(a.rsplit("al"))
print(a.rsplit("al",1))複製代碼

運行結果:


m.join()這個方法放到後面說明,感興趣的同窗能夠本身試着摸索一下。
三.字符編碼
對於中國的coder來講,字符編碼是一個永遠繞不過去的坎。python2中默認編碼是ASCII,而在python3中默認編碼是utf-8,而中文一般都是使用GBK,gb2312或者gb18030,在臺灣可能使用大五碼,各個國家都有不一樣的編碼方式,若是編碼不一樣,勢必會出來亂碼的問題。爲了更好的解決這個問題Unicode誕生了。Unicode是什麼呢?簡單點理解就是全部的編碼的集合,包含了全部的語言。也就是說全部語言都用這一個標準,是否是就不會出現亂碼的問題了。上面說的utf-8其實就屬於Unicode的,而這兩者的區別在於佔用的空間大小不同,簡單點說utf-8更節省空間。
經過上面簡單的描述,當字符串出現亂碼怎麼解決?能夠知道Unicode是一個大管家,這樣是否是能夠先把某種編碼格式的字符串先解碼(經過decode()方法)轉成Unicode,再用utf-8(python3通常用utf-8)編碼(經過encode()))出來是否是就解決問題了。上面也提到了python3默認是utf-8編碼,utf-8就是Unicode,也就是說python3中亂碼問題是不多遇到的。說到這裏有個問題,在寫代碼的開頭有時候須要加上:

# -*- coding: <encoding name> -*-複製代碼

這樣一句話,用來聲明文檔的編碼格式的(其中encoding name是代碼所須要的編碼格式,它能夠是任意一種Python支持的格式,通常都會使用utf-8的編碼格式),跟python中默認編碼是兩回事,要區分開。基礎很差的同窗可能對文中的各個編碼格式都不太瞭解,這裏我就不一一解釋,你們能夠本身學習,網上材料不少。這裏對編碼的問題的描述也不是很詳細,也就給你們大概的描述了一下,腦海裏留個印象知道有這麼個東西,畢竟在python3對字符編解碼方面的設計優化的很好了。
對於基礎的學習不必一會兒說的太深太細,反而事倍功半,隨着往後的學習一點點深刻,天天學習一點點,生活美好一點點。

福利:關注微信公衆號,回覆 python書,可得到目前python學習的一些承認度比較高的電子書

Tips:上面涉及到的代碼。初學者必定要認認真真的本身敲一下,全部的運行的結果我也都在文章中給出來了,千萬不要眼高手低。初學者大忌,不少時候本身實現的結果和想象的是不同的。

特此說明:做者的內容均爲原創,轉載代表出處。因爲本人的能力水平有限,若有發現錯誤和紕漏請聯繫做者,拜謝!
若是軟件安裝使用python等內容還有寫不明白的同窗能夠加入qq羣:476581018交流,或者關注微信公衆號(快掃下圖(●’◡’●))系列文章會在公衆號最新發布,歡迎你們持續關注,獲取最新更新內容,而且有更多福利等你哦!

相關文章
相關標籤/搜索