摘要:項(xiàng)目地址所有用過的人應(yīng)該都看過下面兩行錯(cuò)誤信息這就是界的錕斤拷今天和接下來幾期的內(nèi)容將主要關(guān)注中的字符串字節(jié)及兩者之間的相互轉(zhuǎn)換。
項(xiàng)目地址:https://git.io/pytips
所有用過 Python (2&3)的人應(yīng)該都看過下面兩行錯(cuò)誤信息:
UnicodeEncodeError: "ascii" codec can"t encode characters in position 0-1: ordinal not in range(128)
UnicodeDecodeError: "utf-8" codec can"t decode bytes in position 0-1: invalid continuation byte
這就是 Python 界的"錕斤拷"!
今天和接下來幾期的內(nèi)容將主要關(guān)注 Python 中的字符串(str)、字節(jié)(bytes)及兩者之間的相互轉(zhuǎn)換(encode/decode)。也許不能讓你突然間解決所有亂碼問題,但希望可以幫助你迅速找到問題所在。
定義Python 中對字符串的定義如下:
Textual data in Python is handled with str objects, or strings. Strings are immutable sequences of Unicode code points.
Python 3.5 中字符串是由一系列 Unicode 碼位(code point)所組成的不可變序列:
("S" "T" "R" "I" "N" "G")
"STRING"
不可變是指無法對字符串本身進(jìn)行更改操作:
s = "Hello" print(s[3]) s[3] = "o"
l
--------------------------------------------------------------------------- TypeError Traceback (most recent call last)in () 1 s = "Hello" 2 print(s[3]) ----> 3 s[3] = "o" TypeError: "str" object does not support item assignment
而序列(sequence)則是指字符串繼承序列類型(list/tuple/range)的通用操作:
[i.upper() for i in "hello"]
["H", "E", "L", "L", "O"]
至于 Unicode 暫時(shí)可以看作一張非常大的地圖,這張地圖里面記錄了世界上所有的符號,而碼位則是每個(gè)符號所對應(yīng)的坐標(biāo)(具體內(nèi)容將在后面的幾期介紹)。
s = "雨" print(s) print(len(s)) print(s.encode())
雨 1 b"xe9x9bxa8"常用操作
len:字符串長度;
split & join
find & index
strip
upper & lower & swapcase & title & capitalize
endswith & startswith & is*
zfill
# split & join s = "Hello world!" print(",".join(s.split())) # 常用的切分 & 重組操作 "https://github.com/rainyear/pytips".split("/", 2) # 限定切分次數(shù)
Hello,world!
["https:", "", "github.com/rainyear/pytips"]
s = "coffee" print(s.find("f")) # 從左至右搜索,返回第一個(gè)下標(biāo) print(s.rfind("f")) # 從右至左搜索,返回第一個(gè)下表 print(s.find("a")) # 若不存在則返回 -1 print(s.index("a")) # 若不存在則拋出 ValueError,其余與 find 相同
2 3 -1
--------------------------------------------------------------------------- ValueError Traceback (most recent call last)in () 4 5 print(s.find("a")) # 若不存在則返回 -1 ----> 6 print(s.index("a")) # 若不存在則拋出 ValueError,其余與 find 相同 ValueError: substring not found
print(" hello world ".strip()) print("helloworld".strip("heo")) print("["+" i ".lstrip() +"]") print("["+" i ".rstrip() +"]")
hello world lloworld [i ] [ i]
print("{} {} {} {} {}".format( "hello, WORLD".upper(), "hello, WORLD".lower(), "hello, WORLD".swapcase(), "hello, WORLD".capitalize(), "hello, WORLD".title()))
HELLO, WORLD hello, world HELLO, world Hello, world Hello, World
print(""" {}|{} {}|{} {}|{} {}|{} {}|{} {}|{} """.format( "Python".startswith("P"),"Python".startswith("y"), "Python".endswith("n"),"Python".endswith("o"), "i23o6".isalnum(),"1 2 3 0 6".isalnum(), "isalpha".isalpha(),"isa1pha".isalpha(), "python".islower(),"Python".islower(), "PYTHON".isupper(),"Python".isupper(), ))
True|False True|False True|False True|False True|False True|False
"101".zfill(8)
"00000101"
format / encode
格式化輸出 format 是非常有用的工具,將會(huì)多帶帶進(jìn)行介紹;encode 會(huì)在 bytes-decode-Unicode-encode-bytes 中詳細(xì)介紹。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/37807.html
摘要:回到對字節(jié)和字節(jié)數(shù)組的定義為了用計(jì)算機(jī)可以理解的數(shù)字描述人類使用的字符,我們需要一張數(shù)字與字符對應(yīng)的表。由于和字符串一樣是序列類型,字節(jié)和字節(jié)數(shù)組可用的方法也類似,這里就不一一列舉了。 項(xiàng)目地址:https://git.io/pytips 0x07 中介紹了 Python 中的字符串類型,字符串類型是對人類友好的符號,但計(jì)算機(jī)只認(rèn)識(shí)一種符號,那就是二進(jìn)制(binary)數(shù),或者說是數(shù)字...
摘要:只包含了個(gè)基本拉丁字母阿拉伯?dāng)?shù)目字和英式標(biāo)點(diǎn)符號一共個(gè)字符,因此只需要不占滿一個(gè)字節(jié)就可以存儲(chǔ),而則涵蓋的數(shù)據(jù)除了視覺上的字形編碼方法標(biāo)準(zhǔn)的字符編碼外,還包含了字符特性,如大小寫字母,共可包含個(gè)字符,而到現(xiàn)在只填充了其中的個(gè)位置。 項(xiàng)目地址:https://git.io/pytips 0x07 和 0x08 分別介紹了 Python 中的字符串類型(str)和字節(jié)類型(byte),以及...
摘要:項(xiàng)目地址相信很多人在格式化字符串的時(shí)候都用的語法,提出一種更先進(jìn)的格式化方法并成為的標(biāo)準(zhǔn)用來替換舊的格式化語法,從開始已經(jīng)實(shí)現(xiàn)了這一方法其它解釋器未考證。 項(xiàng)目地址:https://git.io/pytips 相信很多人在格式化字符串的時(shí)候都用%s % v的語法,PEP 3101 提出一種更先進(jìn)的格式化方法 str.format() 并成為 Python 3 的標(biāo)準(zhǔn)用來替換舊的 %s ...
摘要:項(xiàng)目地址迭代器與生成器迭代器與生成器是中比較常用又很容易混淆的兩個(gè)概念,今天就把它們梳理一遍,并舉一些常用的例子。生成器前面說到創(chuàng)建迭代器有種方法,其中第三種就是生成器。 項(xiàng)目地址:https://git.io/pytips 迭代器與生成器 迭代器(iterator)與生成器(generator)是 Python 中比較常用又很容易混淆的兩個(gè)概念,今天就把它們梳理一遍,并舉一些常用的例...
摘要:可以通過一個(gè)簡單的例子來展示當(dāng)然,也可以用狀態(tài)變量的做法來替代總結(jié)有人覺得的這些用法違反直覺或者是而非,不值得提倡。 項(xiàng)目地址:https://git.io/pytips 我們都知道 Python 中 else 的基本用法是在條件控制語句中的 if...elif...else...,但是 else 還有兩個(gè)其它的用途,一是用于循環(huán)的結(jié)尾,另一個(gè)是用在錯(cuò)誤處理的 try 中。這原本是 P...
閱讀 1504·2021-10-11 10:59
閱讀 1876·2021-09-09 11:36
閱讀 1384·2019-08-30 15:55
閱讀 1327·2019-08-29 11:20
閱讀 3063·2019-08-26 13:39
閱讀 1466·2019-08-26 13:37
閱讀 1958·2019-08-26 12:11
閱讀 1324·2019-08-23 14:28