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