需求:當我們讀取一個文件之後,將裏面的內容轉變爲二進制列表。
用處:在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]