通过在python中递增字母/数字来创建特定大小的文件。

时间:2014-01-15 19:24:28

标签: python file-io

如何创建特定大小的文件(比如1024字节),每行应按递增顺序排列数字或字母。文件的总大小不应超过1024个字节(即使在将字母/数字放入其中之后)。

我试过这个

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

但是这会创建一个大于1024的文件,其数字为1到1023.
我是python的初学者,所以我将不胜感激。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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'

答案 2 :(得分:1)

唯一棘手的问题是,随着数字越来越大,数字的位数越来越多。你可以通过用零填充来避免这种情况,使每一行的大小相同。例如,让我们使每行长8个字节。 <{1}}占用两个,剩下6个数字,这已经足够了。

'\r\n'

要获得没有填充的正好1024个字节,您将无法从0或1开始。具有单个数字的行占用三个字节,两个数字占用四个字节,三个数字占用五个字节。 1024/5 = 204余数4,因此您需要204行三位数字和一个两位数字。两位数字必须为99,以便下一个数字有三位数。所以这有效:

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