2017-09-25 28 views
0
for z in range(1,n+1): 
    with open("file_{}.bin".format(z), "rb") as file: 
     for byte in file: 
      for bit in byte: 
       if bit=='0': 
        s0+=1 
       else: 
        s1+=1 
     break 

我用休息來停止循環for byte in file:上讀取下一個文件的同一位置,並增加了,但它返回只爲一個循環在多個文件中

我想數計數位在每個位置0爲對多個文件的每一個位置號碼, 實施例:

file_0.bin包含

10110000 

file_1.bin包含

11101010 

用於位置0的輸出將是:0

用於位置1的輸出將是:1

爲7位輸出將是:2個

任何想法? 在此先感謝

+0

首先解決您的壓痕,請。 –

+0

編輯,當我複製它只是一個錯誤:) – amintou

+0

所有文件都有相同大小的字節? –

回答

0

您可以使用collections.Counter,其目的是爲了這一點 - 作爲一個計數器。您可以使用enumerate在增量時跟蹤指數。

from collections import Counter 

c = Counter() 
for z in range(1, n + 1): 
    with open("file_{}.bin".format(z), "r") as file: 
     for byte in file: 
      for i, bit in enumerate(byte.strip()): 
       c[i] += (1 - int(bit)) 

print(c) 

這會比將多個變量存儲在內存中更清晰。


如果你只在你的文件中的一個字節串,該解決方案簡化了一下:

with open("file_{}.bin".format(z), "r") as file: 
    byte = file.read().strip() 
    for i, bit in enumerate(byte): 
     c[i] += (1 - int(bit)) 
+0

感謝您的回覆,但我不知道如何計算所有文件的位置0同時等於「0」的位,這個代碼僅用於計算一個文件? – amintou

+0

@amintou好吧,我的壞。該代碼計算了所有的1,而不是全部的0。現在改變了。 –

+0

我所有的文件都有9307字節,我只需要循環遍歷單個位置併爲每個文件計數'0',它看起來很複雜,但是您的代碼似乎工作 – amintou