Разделить список на несколько последовательных файлов - PullRequest
0 голосов
/ 28 марта 2020

У меня есть файл с более чем 2000 анекдотов, над которыми я провел некоторую предварительную обработку, и теперь они есть в списке. Я хочу напечатать их так, чтобы их было 20 на один текстовый документ (за исключением последнего документа, который может иметь меньше) и чтобы они были пронумерованы последовательно (jokeset1.txt, jokeset2.txt, et c), но когда я пытаюсь сделать что-то вроде этого, он только создает первый и последний документы. Как я могу это исправить?

i = 0
while len(jokes)>0:
    i+=1
    with open('Jokeset/jokeset' + str(i)+'.txt', 'w') as newfile:
        if len(jokes)<20:
            x = len(jokes)
        else:
            x = 20
        random.shuffle(jokes)
        for i in range(x):
            print(jokes[i], file = newfile)
        del jokes[:x]

1 Ответ

0 голосов
/ 28 марта 2020

Вы переписываете переменную i внутри l oop!

У вас есть i = 1 для первого запуска l oop, поэтому первый файл записывается, но затем, когда вы делаете

for i in range(x):
    print(jokes[i], file = newfile)

, переменная становится i = 19. Затем вы просто делаете i += 1 в начале внешнего l oop и пишете в файл с именем 'Jokeset/jokeset20.txt'. И это происходит снова и снова, поэтому никакие другие файлы никогда не записываются.

Просто переименуйте одну из ваших i переменных, и все будет хорошо!

...