0

我(未成功)试图弄清楚如何使用循环创建复合字母列表。我是一个初学者程序员,已经学习了几个月的python。幸运的是,我后来找到了解决这个问题的方法——生成一个字符串列表,由 Python 中其他列表中的字母组合而成——参见第一个答案。

因此,我采用了该代码并根据需要添加了一些内容。我将列表随机化,将列表转换为逗号分隔的文件。这是代码:

from string import ascii_lowercase as al
from itertools import product
import random

list = ["".join(p) for i in xrange(1,6) for p in product(al, repeat = i)]

random.shuffle(list)

joined = ",".join(list)

f = open("double_letter_generator_output.txt", 'w')

print >> f, joined
f.close()

我现在需要做的就是将那个庞大的文件拆分"double_letter_generator_output.txt"成更小的文件。每个文件需要包含 200 个“单词”。所以它需要分成许多文件。这些文件当然还不存在,也需要由程序创建。我怎样才能做到这一点?

4

1 回答 1

1

这就是我的做法,但我不确定你为什么要把它分成更小的文件。我通常会一次完成所有操作,但我假设文件太大而无法存储在工作内存中,所以我一次遍历一个字符。

让 bigfile.txt 包含

1,2,3,4,5,6,7,8,9,10,11,12,13,14

MAX_NUM_ELEMS = 2 #you'll want this to be 200
nameCounter = 1
numElemsCounter = 0
with open('bigfile.txt', 'r') as bigfile:
    outputFile = open('output' + str(nameCounter) + '.txt', 'a')
    for letter in bigfile.read():
        if letter == ',':
            numElemsCounter += 1
        if numElemsCounter == MAX_NUM_ELEMS:
            numElemsCounter = 0
            outputFile.close()
            nameCounter += 1
            outputFile = open('output' + str(nameCounter) + '.txt', 'a')
        else:
            outputFile.write(letter);
    outputFile.close()

现在 output1.txt 是1,2, output2.txt 是3,4, output3.txt 是5,6, 等等。

$ cat output7.txt
13,14

这有点草率,你应该写一个很好的函数来完成它并按照你喜欢的方式格式化它!

仅供参考,如果您想写入一堆不同的文件,没有理由先写入一个大文件。立即写入小文件。

这样,最后一个文件的元素可能少于 MAX_NUM_ELEMS。

于 2013-09-04T01:05:52.090 回答