2014-01-15 22 views
0

如何創建一個特定大小的文件(比如說1024bytes),每行應該有一個數字或字母表。文件的總大小不應超過1024個字節(即使在放置字母/數字後)。用python增加字母/數字創建一個特定大小的文件。

我想這

def create_file_numbers(filename, size): 
    f=open(filename,"wb") 
    for x in range(size): 
     f.write(str(x)) 
     f.write('\r\n') 
    f.close() 
    pass 

但是這創造了大小比有數字1到1023
我在python初學者這樣的解釋,將不勝感激1024更大的文件。

回答

2

數字的字符串表示大於數字,通常是每個字符的一個,兩個或四個字節。您的\r\n也佔用了該空間。

max_len = max_size/bytes_per_char 
s = '' 
i = 0 
while len(s) < max_len: 
    s += str(i) + '\r\n' 
    i += 1 
if len(s) > max_len: # because it may not divide evenly 
    s = s[:max_len] 
open(filename, "wb").write(s) 
+0

那麼我怎麼能填充每行增加數字的文件?並且不使用\ r \ n如何移動到下一行? – codefreak

+0

你可以擁有所有這些。但是你不能做1024次迭代並期望1024字節。你需要少得多的數字。 – mhlester

+0

是的,我知道這是主要問題。如何使每行上的數字增加1024個字節的文件。 – codefreak

1

定義你的角色的字符串:

import string 
alphabet = string.digits + string.ascii_letters 

然後更換:

f.write(str(x)) 

有:

f.write(alphabet[x % len(alphabet)]) 

例如:

>>> import string 
>>> alphabet = string.digits + string.ascii_letters 
>>> ' '.join(alphabet[x % len(alphabet)] for x in range(200)) 
'0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 a b c d' 
+0

當x + 87超過127? – AShelly

+0

@AShelly OP沒有指定大小範圍 - 這應該足夠開始 – jterrace

+0

OP特別給了1024作爲一個例子... – AShelly

1

關於這一點唯一棘手的是,數字越大,數字越大。您可以通過填充零來避免這種情況,從而使每行的大小相同。例如,我們讓每一行的長度爲8個字節。 '\r\n'佔用了兩位,數字爲6,這已經足夠了。

for n in range(1024/8): 
    f.write('%06d\r\n' % n) 

要得到完全1024個字節沒有填充,你將不能夠在0或1。用一個單一的數字一行開始需要三個字節,兩個數字需要四個字節,三個數字需要5分鐘。 1024/5 = 204是餘數4,所以你需要204行三位數的數字和一個兩位數的數字。兩位數字必須是99,以便下一個數字將有三位數字。所以這個作品:

for n in range(99, 304): 
    f.write('%d\r\n' % n) 
+0

即使我嘗試大小變得超過1024.它變成1280字節。 – codefreak

+1

是的,那是因爲我輸入了「8」,我的意思是「6」!現在修復。 –

+0

這是完美的。謝謝:)但沒有任何方式,我可以避免填充,但仍然得到所需的文件。 – codefreak

相關問題