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]

你可能感兴趣的:(Python基础)