問題:想在位元組字串上執行普通的文字操作(比如移除,搜尋和替換)。
解決方案
1)位元組字串同樣也支援大部分和文字字串一樣的內建操作。比如:
>>> data = b'hello world'>>> data[0:5]
b'hello'
>>> data.startswith(b'hello')
true
>>> data.split()
[b'hello', b'world']
>>> data.replace(b'hello', b'hello cruel')
b'hello cruel world'
2)這些操作同樣也適用於位元組陣列。比如:
>>> data = bytearray(b'hello world')>>> data[0:5]
bytearray(b'hello')
>>> data.startswith(b'hello')
true
>>> data.split()
[bytearray(b'hello'), bytearray(b'world')]
>>> data.replace(b'hello', b'hello cruel')
bytearray(b'hello cruel world')
3)你可以使用正規表示式匹配位元組字串,但是正規表示式本身必須也是位元組串。
>>> data = b'foo:bar,spam'>>> import re
>>> re.split('[:,]',data)
traceback (most recent call last):
file "", line 1, in file "/usr/local/lib/python3.3/re.py", line 191, in split return _compile(pattern, flags).split(string, maxsplit) typeerror: can't use a string pattern on a bytes-like object
>>> re.split(b'[:,]',data) # notice: pattern as bytes
[b'foo', b'bar', b'spam']
4)大多數情況下,在文字字串上的操作均可用於位元組字串。然而,這裡也有一些需要注意的不同點。首先,位元組字串的索引操作返回整數而不是單獨字元。比如:
>>> a = 'hello world' # text string>>> a[0]
'h'>>> a[1]
'e'>>> b = b'hello world' # byte string
>>> b[0]
72>>> b[1]
101>>>
5)第二點,位元組字串不會提供乙個美觀的字串表示,也不能很好的列印出來,除非它們先被解碼為乙個文字字串。比如:
>>> s = b'hello world'>>> print(s)
b'hello world' # observe b'...'
>>> print(s.decode('ascii'))
hello world
6)如果你想格式化位元組字串,你得先使用標準的文字字串,然後將其編碼為位元組字串。比如:
>>> ' '.format('acme', 100, 490.1).encode('ascii')b'acme 100 490.10'
>>>
7)最後需要注意的是,使用位元組字串可能會改變一些操作的語義,特別是那些跟檔案系統有關的操作。比如,如果你使用乙個編碼為位元組的檔名,而不是乙個普通文字字串,會禁用檔名的編碼/解碼。比如:
8)最後提一點,一些程式設計師為了提公升程式執行的速度會傾向於使用位元組字串而不是文字字串。儘管操作位元組字串確實會比文字更加高效(因為處理文字固有的unicode 相關開銷)。這樣做通常會導致非常雜亂的**。你會經常發現位元組字串並不能和python 的其他部分工作的很好,並且你還得手動處理所有的編碼/解碼操作。坦白講,如果你在處理文字的話,就直接在程式中使用普通的文字字串而不是位元組字串。
python學習之字串 上
字串 python 的字串被劃歸為不可變序列這一類別,意味著這些字串所包含的字元存在從左至右的位置順序,並且他們不可以在原處修改.字串常量 單引號 spam 雙引號 spam 三引號 spam.spam.轉義字元 s tp na om raw字串 r c new test.spam 單雙引號字串是一...
字元陣列與字串(上)
一 統計空格 解決問題 輸入一行字元 字元個數不多於80 統計其中空格的個數 include intmain void printf 空格數為 d n count return0 二 一維字元陣列與字串 一維字元陣列的定義 引用 初始化與其他型別的一維陣列一樣。定義乙個含80個字元型元素的陣列str...
字串上行走
計算理工學院為了慶祝建校 12812 8 周年舉辦了乙個盛大的典禮。典禮上有一條 字串大道 由 l l 個寫在地上的字元組成。由於地上的字元很大,乙個人正常一步只能向前走乙個字元。小蒜和波瀚一開始分別站在字串大道第乙個字元和最後乙個字元所在的位置,從字串大道的兩端相向而行。已知小蒜每秒可以走 a a...