Задачка на питоне ноутпад
Имеем файл имена.тхт в нем один столбец, с допустим 100 именами девушек:
Евлампия
Гликерия
Степанида
Ива
Муза
Хлоя
Ляля
....
надо преобразовать в группы со сдвигом в одно имя, по пять девушек и сохранить его в отдельный файл группа.тхт
Евлампия Гликерия Степанида Ива Муза
Гликерия Степанида Ива Муза Хлоя
Степанида Ива Муза Хлоя Ляля
и так далее...

Вы уже спрашивали что-то подобное, только раньше это были не девушки, а какие-то майнерские цифири. ))
Вы реально вообще программирование не знаете? Тут простой цикл и чтение/запись в файл.
Вы уже спрашивали что-то подобное...
Не мешайся в моих темах. Это программирование, тебе это наверное уже никогда не понять, я же уже 100 раз объяснял как работает блокчейн.
Там было на яваскрипт, тема боковое смещение каретки, из большого числа рубил маленькие по 42 знака, адреса куда складывать деньги,
А тут девушки, рабочая неделя, сечёшь? Значит я уже нарубил бабла, к тому же тут питон, хотя можно и на скрипте, потом скопирую мышкой.

примитифф. что-то такое:
names = []
with open (filename) as f:
for line in f:
array.append(line)
#имеем list с именами. делаем группьі
groups = []
i = 0
while i < len(names) - 5 #проверь, нужно ли меньше/меньшеравно и 5 или что-то другое, неохота думать
groupline = ' '.join (names[i:i+5]
groups.append(groupline)
i+=1
записать list в файл тоже сам не справишься? ну и отступьі поделай красиво.
зі. а зачем єто?
Так наверное:
items = [] #items массив r = open("имена.txt", "r") #Открываем файл имена.txt для чтения w = open("группа.txt", "w") #Открыввем файл группа.тхт для записи #цикл, читаем из файла имена.txt for i in r: items.append(i.replace("\n", " ")) #заменяем новую строку на пробел и добавляем в массив items #Пока массив не пустой... while len(items) > 0: #Считываем из массива, и записываем в файл for i in items: w.write(i) w.write("\n") #Новая строка items.pop(0) #Удаляем первый элемент в массиве
Второй вариант:
items = [] #items массив r = open("имена.txt", "r") #Открываем файл имена.txt для чтения w = open("группа.txt", "w") #Открыввем файл группа.тхт для записи #цикл, читаем из файла имена.txt for i in r: items.append(i.replace("\n", " ")) #заменяем новую строку на пробел и добавляем в массив items #Пока массив не пустой... while len(items) > 0: #Считываем из массива, и записываем в файл for i in range(0, 5): w.write(items[ i ]) w.write("\n") #Новая строка items.pop(0) #Удаляем первый элемент в массиве
Ужс какой... я вам как художник художнику скажу... (с)
А так не легче?
with open('/home/me/some_names.txt') as f: names = f.read().splitlines() for i, group in enumerate([ names[names.index(n):names.index(n) + 5] for n in names ]): with open(f'names_group_{i}.txt', 'w') as fw: fw.writelines(' '.join(group))
with open(f'names_group_{i}.txt'
Насколько я понял из постановки задачи, на выходе должен получиться один файл.
names[names.index(n):names.index(n) + 5] for n in names
А что будет, если имена девушек не уникальны в исходном файле?
Старый, твой код это хороший пример как не надо писать на Питоне. Так даже не джуны пишут, а какие-то переученые существа. Завел кучу явных циклов хотя надо чем меньше циклов тем лучше. Далее ручная итерация через i - это на каком языке? Ну и явно пихать все пятерки в список это финиш.
да мне насрать. конечно, если бьі нужно "красиво", то я бьі вообще никаких огромньіх массивов не создавал, а читал бьі по пять штук в группу и записьівал в файл. но для на один раз, бьістро и каждому говнюку с дивана чтобі сразу понятно, а кому-то еще и редкий случай себя гением почудить. так что мой код - лучше всего того, что за ним последовало. и где все бьіли? и где твой код как надо писать? надо писать чтобьі надежно результат правильньій получить. а вариантов - тьісячи. даже для полиньі с евдокией
зі. все дружно ждем твой правильньій pythonian код.
Да, с одним файлом проглядел, ну тогда ж еще проще.
with open('/home/me/some_names.txt') as f: names = f.read().splitlines() groups = [names[names.index(n):names.index(n) + 5] for n in names] with open('groups_result.txt', 'w') as fw: for group in groups: fw.write(f"{' '.join(group)}\n")
Про "уникализацию" записываемых в итоговый файл значений, я в задаче не вижу.
Более того, если там ожидается четкое структурное смещение на одну позицию и вот такая разбивка по группам, то подозреваю, что удаление дубликатов - сильно похерит это ожидание )) Ой, но даже если бы, ну еще одна доп. проверка, перед вставкой в лист. Идею-то вы поняли.
names = (line.strip() for line in open("input.txt")) groups = (",".join(names[i:i + 5]) for i, n in enumerate(names)) # TODO: убрать последние элементы with open("output.txt", "w") as f: f.write("\n".join(groups))
Вариант 2: генератор комбинация имен автоматом (третья строка)
from more_itertools import windowed names = (line.strip() for line in open("input.txt")) groups = windowed(names, 5) # Генератор всех комбинаций из 5 элементов with open("output.txt", "w") as f: f.write("\n".join(groups))
Если хочется запись в файл также делать lazy, то надо делать так:
with open("output.txt", "w") as f: for п in groups: f.write(",".join(п) + "\n")
Ты проглядел еще раз. Я не говорил про итоговый файл. Я говорил про исходный файл.
Я не проглядел, а смотрел в исходную задачу, а не в твой коммент.
Ну ок, чтение исходных значений просто оборачивается в сет.
names = set(f.read().splitlines())