Задачка на питоне ноутпад
Имеем файл имена.тхт в нем один столбец, с допустим 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))
Чтобы ошибка не показывалась надо написать так:
while len(items) >= 5:
Моя ФЛ Он и Онаwith open(f'names_group_{i}.txt'
Насколько я понял из постановки задачи, на выходе должен получиться один файл.
names[names.index(n):names.index(n) + 5] for n in names
А что будет, если имена девушек не уникальны в исходном файле?
Старый, твой код это хороший пример как не надо писать на Питоне. Так даже не джуны пишут, а какие-то переученые существа. Завел кучу явных циклов хотя надо чем меньше циклов тем лучше. Далее ручная итерация через i - это на каком языке? Ну и явно пихать все пятерки в список это финиш.
Хлоя - я бы бактерию так назвал.
Единственную Хлою знаю это девушка андроид из игры Detroit Become Human, она в главном меню говорит:
Моя ФЛ Он и Онада мне насрать. конечно, если бьі нужно "красиво", то я бьі вообще никаких огромньіх массивов не создавал, а читал бьі по пять штук в группу и записьівал в файл. но для на один раз, бьістро и каждому говнюку с дивана чтобі сразу понятно, а кому-то еще и редкий случай себя гением почудить. так что мой код - лучше всего того, что за ним последовало. и где все бьіли? и где твой код как надо писать? надо писать чтобьі надежно результат правильньій получить. а вариантов - тьісячи. даже для полиньі с евдокией
зі. все дружно ждем твой правильньій 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())

