需求:当我们读取一个文件之后,将里面的内容转变为二进制列表。
用处:在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]