python ASCII字符的實用程序 curses.ascii 庫的安裝使用

https://www.lfd.uci.edu/~gohlke/pythonlibs/

下載對自己電腦配置的WHL文件,並安裝,比如我用的是curses‑2.2+utf8‑cp27‑cp27m‑win_amd64.whl


pip install curses‑2.2+utf8‑cp27‑cp27m‑win_amd64.whl

Python 代碼中即可使用如下的方法

from curses  import ascii

ascii.isgraph(33)

ascii.isalpha('a')

 

Python字節數組【bytes/bytearray】

bytes

>>> type(b'xxxxx')
<class 'bytes'>

>>> type('xxxxx')
<class 'str'>

bytes是byte的序列,而str是unicode的序列。

 

1、str 轉換成 bytes 用 encode() 方法:(注意:這有個坑,str1.encode不加括號和加括號是不一樣的,自己試試,初學貌似2.0不影響,3.0變了,不加括號開發環境語法不報錯)

str = '人生苦短,我用Python!'
bytes = str.encode()
print(bytes)

輸出:

b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!'

2、好了,反轉換 decode() :

bytes = b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!'
str = bytes.decode()
print(str)

輸出:

人生苦短,我用Python!

bytearray

1、bytearray和bytes不一樣的地方在於,bytearray是可變的。

str = '人生苦短,我用Python!'
bytes = bytearray(str.encode())
bytes = bytearray(b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!')
str = bytes.decode()
print(str)

輸出:

'人生苦短,我用Python!'

2、改變bytearray

bytes[:6] = bytearray('生命'.encode())
bytes = bytearray(b'\xe7\x94\x9f\xe5\x91\xbd\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!')
str = bytes.decode()
print(str)

輸出:

生命苦短,我用Python!

各種 bytes :

a = bytes('abc', 'utf-8')  
print(a)
> b'abc'

b  = bytes(1)  
print(b)
> b'\x00'

c = bytes([2,3,6,8])  
print(c)
> b'\x02\x03\x06\x08'

print(b"Python")
> b'Python'

python = (b'P' b'y' b"t" b'o' b'n')
print(python)
> b'Pyton'

 Bytes 代表的是(二進制)數字的序列,只不過在是通過 ASCII 編碼之後纔是我們看到的字符形式,如果我們單獨取出一個字節,它仍然是一個數字:

1

print(b"Python"[0])<br>> 80

我們可以用 b"*" 的形式創建一個字節類型,前提條件是這裏的 * 必須是 ASCII 中可用的字符,否則將會超出限制:

print(b"雨")
> File "", line 1
   print(b"雨")
         ^
SyntaxError: bytes can only contain ASCII literal characters.

錯誤提示說明:字節類型只能允許 ASCII 字符(0~127~255)。ASCII 表裏面所有的字符只佔據了 [31, 127]

那對於這一範圍之外的數字我們要怎麼才能表示爲字節類型?答案就是用特殊的轉義符號x+十六進制數字 :

print(b'xff'[0])
> 255
print(b'x24')
> b'$'

反過來我們也可以將數字(0~255)轉變成轉義後的字節類型:

print(bytes([24]))
> b'x18'
print(bytes([36,36,36])) # 記住字節類型是一個序列

或者直接從十六進制得來:

print(bytes.fromhex("7b 7d"))
> b'{}'

# 逆運算
print(b'{ }'.hex())
> 7b207d
 
int(b' '.hex(), base=16)
> 32

測試的一些代碼:

print("$".encode('ascii'))
> b'$'
print("$".encode('ascii')[0])
> 36

ba = bytearray(b'hello')
ba[0:1] = b'w'
print(ba)
bytearray(b'wello') 

可是如果我們對一些奇怪的字符進行 ASCII 編碼,就會發生異常:ordinal not in range(128)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章