Питон: Как выводить пакеты слов по 10 при использовании списка?

#python

Вопрос:

У меня есть list.txt что составляет ~4000 слов, подобных этому:

 cool
fast
smart
welcome
coder
word
nine
stacked
jokes
funny 

haha
lol
qwerty
computer
keyboard 
 

Я хотел бы взять все данные из этого списка и поместить их в другой текстовый документ ( output.txt ) партиями по 10 штук с пустой строкой между ними, вот так;

 cool fast smart welcome coder word nine stacked jokes funny 

haha lol qwerty computer keyboard 

blablabla... 
 

Кто — нибудь, кто мог бы мне здесь помочь?

Я думал об использовании списка, но я понятия не имею, как разбить его на пакеты по 10 добавьте пустую строку между каждым из них!

Комментарии:

1. Да, но я бы хотел, чтобы они не были сложены друг на друга, а были в одном предложении

2. Как это выглядит в конце концов? Является ли последняя группа полной (т. е. содержит 10 слов) и следует ли за ней пустая строка?

3. Результат будет примерно таким: классный быстрый умный кодер приветствия слово девять сложенных шуток смешная компьютерная клавиатура ха-ха-лол qwerty Я просто хочу, чтобы мой список был отформатирован иначе, чем в настоящее время, Вместо сложенного текста я хочу, чтобы он в основном отправлялся в 10 слов длиной

4. Я прошу прощения за неясность, я действительно не знаю другого способа сформулировать это, ха-ха

Ответ №1:

Это будет читаться в словах от test.txt и выводить их на result.txt .

В каждой строке будут NO_WORDS слова, разделенные пробелом, и каждая строка будет разделена пустой строкой.

 NO_WORDS = 10

with open("test.txt") as file:
    data_in = file.readlines()

data_out = [
    [item.replace("n", " ") for item in data_in[idx : idx   NO_WORDS]]   ["nn"]
    for idx in range(0, len(data_in), NO_WORDS)
]

print(data_out)

with open("result.txt", "w") as file:
    [file.write("".join(items)) for items in data_out]
 

Комментарии:

1. Это идеально, спасибо, нори

Ответ №2:

 string_batches =  [string[start:start 10] for start in range(0, len(string), 10)]
 

Это возвращает массив с одинаковым размером строк

Ответ №3:

Другое решение:

 from typing import Iterator

NO_WORDS = 10


def group(n, gen):
    gen = iter(gen)

    while True:
        grp = None

        try:
            for i in range(n):
                if grp is None:
                    grp = []
                grp.append(next(gen))
            yield grp

        except StopIteration:
            if grp is not None:
                yield grp
            break


def non_empty_lines(lines):
    for line in lines:
        line = line.strip()
        if line != "":
            yield line.strip()


def main():
    with open('list.txt', 'r') as in_file, open('result.txt', 'w') as out_file:
        for grp in group(NO_WORDS, non_empty_lines(in_file)):
            print(" ".join(grp), file=out_file)



if __name__ == '__main__':
    main()