最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python字節(jié)串"b"前綴案例解析

 更新時(shí)間:2026年02月24日 10:06:46   作者:追逐此刻  
文章主要介紹了Python中的字節(jié)串(bytes)類型,包括其定義、特性、應(yīng)用場景、語法規(guī)則、類型轉(zhuǎn)換方法以及實(shí)際應(yīng)用案例,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

核心結(jié)論:前綴"b"用于創(chuàng)建字節(jié)串對象,它以二進(jìn)制形式存儲(chǔ)數(shù)據(jù),是Python處理文件I/O、網(wǎng)絡(luò)通信等底層操作的基石。

一、基礎(chǔ)定義

官方名稱:字節(jié)串

核心功能:表示不可變的二進(jìn)制數(shù)據(jù)序列(0-255的整數(shù)序列)。

語法形式:在字符串引號前加"b"或"B"

b'hello'  # 字節(jié)串
b"world"  # 同上
B'test'   # 同上

二、數(shù)據(jù)類型特性對比

維度普通字符串 (str)字節(jié)串
存儲(chǔ)內(nèi)容Unicode字符原始字節(jié)數(shù)據(jù)(0-255)
長度單位字符數(shù)字節(jié)數(shù)
編碼已經(jīng)解碼,無需編碼需要指定編碼才能轉(zhuǎn)為文本
可打印性直接顯示字符顯示轉(zhuǎn)義形式(如b'\xe4\xb8\xad')
不可變性不可變不可變
類型檢查type('') is strtype(b'') is bytes

本質(zhì)區(qū)別示例

s = '中'      # 長度1,包含一個(gè)Unicode字符
b = b'\xe4\xb8\xad'  # 長度3,包含3個(gè)字節(jié)(UTF-8編碼)
print(len(s))  # 1
print(len(b))  # 3

三、必須使用字節(jié)串的三大典型場景

1.文件I/O(二進(jìn)制模式)

讀寫圖片、音頻、視頻、壓縮文件等非文本文件時(shí),必須用字節(jié)串:

with open('image.jpg', 'rb') as f:  # 注意'rb'表示二進(jìn)制讀
    data = f.read()  # 返回bytes對象
with open('copy.jpg', 'wb') as f:
    f.write(data)

2.網(wǎng)絡(luò)通信(socket編程)

網(wǎng)絡(luò)協(xié)議傳輸?shù)氖窃甲止?jié)流,而非文本:

import socket
sock = socket.socket()
sock.connect(('example.com', 80))
request = b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n'
sock.sendall(request)  # 必須發(fā)送bytes
response = sock.recv(4096)  # 返回bytes

3.加密與哈希運(yùn)算

加密算法處理的是二進(jìn)制數(shù)據(jù):

import hashlib
md5 = hashlib.md5()
md5.update(b'secret')  # 必須傳入bytes
print(md5.hexdigest())

四、語法規(guī)則

正確聲明方式

b'hello'        # 單引號
b"world"        # 雙引號
b'''multi'''    # 三單引號
B"""multi"""    # 三雙引號
b'\xe4\xb8\xad' # 轉(zhuǎn)義序列

常見錯(cuò)誤寫法

  1. 混合使用編碼字符
b'中文字符'  # ? SyntaxError: bytes can only contain ASCII literal
b'\xe4\xb8\xad'  # ? 正確:用十六進(jìn)制表示UTF-8編碼
  1. 字符串拼接錯(cuò)誤
'text' + b'bytes'  # ? TypeError: can't concat str to bytes
b'text' + b'bytes'  # ? 正確
  1. 格式化不支持
b'hello {}'.format('world')  # ? 字節(jié)串不支持.format()

五、類型轉(zhuǎn)換方法

str → bytes(編碼)

# 方法1:encode()
text = '你好世界'
byte_data = text.encode('utf-8')  # b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'
# 方法2:bytes構(gòu)造函數(shù)
byte_data = bytes(text, 'utf-8')
byte_data = bytes(text, encoding='utf-8')
# 方法3:bytes字面量(僅限ASCII)
byte_data = b'hello'

bytes → str(解碼

# 方法1:decode()
text = byte_data.decode('utf-8')  # '你好世界'
# 方法2:str構(gòu)造函數(shù)
text = str(byte_data, 'utf-8')
text = str(byte_data, encoding='utf-8')
# 處理解碼錯(cuò)誤
text = byte_data.decode('utf-8', errors='ignore')  # 忽略錯(cuò)誤字符
text = byte_data.decode('utf-8', errors='replace')  # 用?替換

六、操作限制與替代方案

字節(jié)串不支持的字符串操作

b'hello'.upper()    # ? 支持(僅ASCII)
b'hello'.lower()    # ? 支持(僅ASCII)
b'hello'.strip()    # ? 支持
# ? 以下操作不支持或不按預(yù)期工作:
b'hello {}'.format('world')  # 不支持格式化
b'hello' + 'world'          # 不能與str拼接
b'hello'.isalpha()          # 非ASCII字符行為不同

替代方案

  1. 需要高級字符串操作?先解碼
byte_data = b'hello \xe4\xb8\xad'
text = byte_data.decode('utf-8')
text = text.upper()  # 使用str的方法
byte_result = text.encode('utf-8')
  1. 字節(jié)串專用方法
b'hello'.find(b'e')      # ? 支持
b'hello'.replace(b'l', b'x')  # ? 支持
b'hello'.split(b'e')     # ? 支持
b'abc'.hex()             # ? 轉(zhuǎn)為十六進(jìn)制字符串
bytes.fromhex('616263')  # ? 從十六進(jìn)制創(chuàng)建

七、實(shí)際應(yīng)用案例

案例1:二進(jìn)制文件復(fù)制器

def copy_binary_file(src, dst, chunk_size=8192):
    """高效復(fù)制二進(jìn)制文件"""
    with open(src, 'rb') as f_src, open(dst, 'wb') as f_dst:
        while True:
            chunk = f_src.read(chunk_size)  # 讀取bytes塊
            if not chunk:
                break
            f_dst.write(chunk)
# 使用示例
copy_binary_file('original.jpg', 'backup.jpg')

案例2:HTTP請求客戶端

import socket
def simple_http_request(host, path='/'):
    """發(fā)送簡單的HTTP GET請求"""
    # 構(gòu)建HTTP請求(必須是bytes)
    request = f"GET {path} HTTP/1.1\r\nHost: {host}\r\n\r\n"
    request_bytes = request.encode('utf-8')
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((host, 80))
    try:
        sock.sendall(request_bytes)
        response = b''
        while True:
            chunk = sock.recv(4096)
            if not chunk:
                break
            response += chunk
        # 分離頭部和主體
        header, _, body = response.partition(b'\r\n\r\n')
        print("Response Header:")
        print(header.decode('utf-8', errors='ignore'))
        return body
    finally:
        sock.close()
# 使用示例
content = simple_http_request('example.com', '/')

案例3:文件哈希校驗(yàn)工具

import hashlib
def calculate_file_hash(filepath, algorithm='md5'):
    """計(jì)算文件的哈希值"""
    hash_func = hashlib.new(algorithm)
    with open(filepath, 'rb') as f:  # 二進(jìn)制模式讀取
        while True:
            chunk = f.read(8192)  # 分塊讀取bytes
            if not chunk:
                break
            hash_func.update(chunk)
    return hash_func.hexdigest()
# 使用示例
print(f"MD5: {calculate_file_hash('document.pdf', 'md5')}")
print(f"SHA256: {calculate_file_hash('document.pdf', 'sha256')}")

關(guān)鍵要點(diǎn)總結(jié)

  1. 記住黃金法則:涉及二進(jìn)制數(shù)據(jù)(文件/網(wǎng)絡(luò)/加密)時(shí),用bytes;涉及文本處理時(shí),用str
  2. 編碼解碼橋梁.encode() 將 str 轉(zhuǎn)為 bytes,.decode() 將 bytes 轉(zhuǎn)為 str
  3. 錯(cuò)誤處理:解碼時(shí)始終考慮 errors 參數(shù)(ignore/replace
  4. 性能考慮:大文件操作時(shí),分塊讀寫bytes更高效

到此這篇關(guān)于Python字節(jié)串“b“前綴案例解析的文章就介紹到這了,更多相關(guān)Python字節(jié)串“b“前綴內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文詳解Python中的時(shí)間和日期處理

    一文詳解Python中的時(shí)間和日期處理

    在Python開發(fā)中,我們經(jīng)常需要處理日期和時(shí)間,Python提供了一些內(nèi)置模塊,如datetime、time和calendar,這些模塊讓我們能夠輕松地獲取、操作和格式化日期和時(shí)間,本文將介紹如何在Python中使用這些模塊進(jìn)行日期和時(shí)間的處理
    2023-06-06
  • Python/JS實(shí)現(xiàn)常見加密算法的示例代碼

    Python/JS實(shí)現(xiàn)常見加密算法的示例代碼

    這篇文章主要為大家詳細(xì)介紹了常見的一些JS加密,并記錄了JS和Python的實(shí)現(xiàn)方式,主要有base64編碼偽加密、MD5、SHAI等,需要的可以參考一下
    2022-11-11
  • Python Tkinter實(shí)現(xiàn)簡易計(jì)算器功能

    Python Tkinter實(shí)現(xiàn)簡易計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了Python Tkinter實(shí)現(xiàn)簡易計(jì)算器功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 利用OpenCV中對圖像數(shù)據(jù)進(jìn)行64F和8U轉(zhuǎn)換的方式

    利用OpenCV中對圖像數(shù)據(jù)進(jìn)行64F和8U轉(zhuǎn)換的方式

    這篇文章主要介紹了利用OpenCV中對圖像數(shù)據(jù)進(jìn)行64F和8U轉(zhuǎn)換的方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • PyCharm中Django ORM屬性提示缺失問題的解決方法

    PyCharm中Django ORM屬性提示缺失問題的解決方法

    PyCharm無法識別Django模型的objects屬性提示,可能因支持未啟用、類型提示缺失或索引未更新,解決方法包括啟用Django支持、配置正確虛擬環(huán)境、添加類型注解、重建索引及更新插件,下面小編通過代碼示例給大家詳細(xì)介紹一下,需要的朋友可以參考下
    2025-07-07
  • 使用Python實(shí)現(xiàn)數(shù)據(jù)庫的風(fēng)險(xiǎn)識別

    使用Python實(shí)現(xiàn)數(shù)據(jù)庫的風(fēng)險(xiǎn)識別

    數(shù)據(jù)庫風(fēng)險(xiǎn)發(fā)現(xiàn)系統(tǒng)旨在識別和緩解數(shù)據(jù)庫中的潛在風(fēng)險(xiǎn),如SQL注入,未授權(quán)訪問等,下面小編就來為大家詳細(xì)介紹一下如何使用Python實(shí)現(xiàn)數(shù)據(jù)庫的風(fēng)險(xiǎn)識別吧
    2025-03-03
  • pycharm進(jìn)行Git關(guān)聯(lián)和取消方式

    pycharm進(jìn)行Git關(guān)聯(lián)和取消方式

    這篇文章主要介紹了pycharm進(jìn)行Git關(guān)聯(lián)和取消方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • pygame游戲之旅 計(jì)算游戲中躲過的障礙數(shù)量

    pygame游戲之旅 計(jì)算游戲中躲過的障礙數(shù)量

    這篇文章主要為大家詳細(xì)介紹了pygame游戲之旅的第8篇,教大家實(shí)現(xiàn)游戲中躲過障礙數(shù)量的計(jì)算,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Python?Celery定時(shí)任務(wù)詳細(xì)講解

    Python?Celery定時(shí)任務(wù)詳細(xì)講解

    這篇文章主要介紹了Python?Celery定時(shí)任務(wù)詳細(xì)講解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • Python使用pyperclip庫操作剪切板

    Python使用pyperclip庫操作剪切板

    本文將介紹如何使用pyperclip庫來進(jìn)行剪切板操作,包括復(fù)制、粘貼文本和圖片,以及清空剪切板內(nèi)容等功能,具有一定的參考價(jià)值,感興趣的 可以了解一下
    2024-03-03

最新評論

望都县| 施甸县| 锡林浩特市| 浙江省| 治多县| 兴宁市| 隆德县| 永平县| 义乌市| 龙山县| 灵寿县| 义马市| 东兴市| 阳曲县| 凤翔县| 连南| 呼玛县| 嫩江县| 信阳市| 卫辉市| 义马市| 文安县| 济宁市| 新营市| 鄂托克前旗| 泾源县| 安乡县| 苍溪县| 文安县| 重庆市| 五台县| 玛纳斯县| 嘉祥县| 阿克陶县| 金秀| 巴南区| 牟定县| 阜城县| 抚州市| 江油市| 德令哈市|