2013-01-17 15 views
1

我的輸入文件可以是任意的塊,所以我會用在Python中,讀取文件十進制數

f = open("in-file", 'rb') 

塊大小約爲4K字節,所以我會用

f.read(4096) 

我想要做的是從文件中按塊讀取塊。另外,由於chunk實際上是一個$ 2^15 $ -bit(4KB)的序列,因此在讀取塊時,我需要將它轉換爲十進制值以供進一步計算。例如,如果第一個塊的形式爲0000 ... 10,我想要的是讓另一個變量保留相應的十進制值,例如,x = 2。

From Convert string to list of bits and viceversa我知道它的代碼可以幫助我通過塊讀取塊。

def tobits(s): 
    result = [] 
    for c in s: 
     bits = bin(ord(c))[2:] 
     bits = '00000000'[len(bits):] + bits 
     result.extend([int(b) for b in bits]) 
    return result 

但是,我不知道如何將輸出列表轉換爲十進制值。有人可以給我一些示例代碼嗎?謝謝。

+0

你的問題有點不清楚:是「塊」一串你想要的數值的字節?或者它是文本,即使用字符'1'和'0'編寫的基數爲2的數字? – millimoose

+0

(理解程序存儲器中通常不存在「十進制」數字,這全是某種二進制表示形式)。 – millimoose

+0

是的,塊是文件的一系列位。例如,如果塊大小設置爲2,並且文件恰好爲10010100,則該文件有4個塊,分別爲00,01,01,10。 – user4478

回答

0

如果我沒有理解這個問題吧,你想要的東西類似如下:

def bytes_to_long(bytes): 
    result = 0l 
    for c in bytes: 
     result *= 256 
     result += ord(c) 
    return result 

這就是說,它很可能這將是有點慢,4KB是一個相當大的long和大量垃圾的人的將被創建。通過使用struct.unpack()並且每次迭代處理多於一個字節,你可能可以改善這一點,但是你必須處理正確的字節順序和一切。在Python 3中,您也可能不需要ord(),因爲它應該從IO方法返回bytes類型。