python中將一個文件轉爲二進制比特列表

需求:當我們讀取一個文件之後,將裏面的內容轉變爲二進制列表。

用處:在python中可以將二進制列表用於隨機數檢測

代碼展示:

import os
import sys


def read_bits_from_file(filename, bigendian=True):
    """
    :param filename: 文件名
    :param bigendian: True表示高位在前(即順序輸出),False表示高位在後(即逆序)
    例如:將字符a變成二進制列表
    高位在前:[0, 1, 1, 0, 0, 0, 0, 1]
    低位在前:[1, 0, 0, 0, 0, 1, 1, 0]
    :return:  將一個文件變成二進制列表
    """
    # 檢查文件是否爲空
    count = os.path.getsize(filename)
    if count == 0:
        raise Exception("⚠警告:文件內容爲空,請檢查!")

    bitlist = list()
    if filename == None:
        f = sys.stdin
        raise Exception("⚠警告:文件不存在,請檢查!")
    else:
        # 以二進制讀取文件
        f = open(filename, "rb")
    while True:
        # 每次讀取16384比特
        bytes = f.read(16384)
        if bytes:  # 如果讀取不爲空
            # 將讀取的二進制變成二進制列表,此時列表中的每一項以字符串形式存在
            temp = list(bin(int(bytes.hex(), 16))[2:])
            # 檢查列表是否省略高位的0,如果省略在前面加入0
            t = len(bytes)*8 - len(temp)
            while t>0:
                t-=1
                temp.insert(0, 0)
            # 將列表中的字符串變成int
             bitlist.extend([int(x) for x in temp])
        else:
            break
    # 關閉流
    f.close()
    del temp

    # 判斷用戶是否需要逆序返回列表,默認正序返回
    if bigendian:
        return bitlist
    else:
        return bitlist[-1::-1]

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