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

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

用處:在python中能夠將二進制列表用於隨機數檢測web

代碼展現:svg

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]