#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()