Функция open. Чтение данных из файла
На этом занятии мы с вами научимся читать данные из файлов. Думаю, вы все прекрасно понимаете, что такое файлы и что они хранятся, как правило, на внешних носителях. (Часто – это жесткий диск устройства или флеш-память или SSD-диск. Бывают и другие носители). Главная особенность файлов – сохранение информации после отключения устройства от питания.
Начнем со знакомства с функцией:
open(file [, mode=’r’, encoding=None, …])
которая открывает указанный файл на чтение или запись данных (по умолчанию – на чтение). Основные ее параметры, следующие:
- file – путь к файлу (вместе с его именем);
- mode – режим доступа к файлу (чтение/запись);
- encoding – кодировка файла.
Чтобы воспользоваться этой функцией, нужно правильно записать первый аргумент – путь к файлу. Давайте, посмотрим различные варианты его определения. Представим, что наш файл ex1.py находится в рабочем каталоге app: Тогда, чтобы обратиться к файлу my_file.txt путь можно записать просто, как: «my_file.txt» или «d:\\app\\my_file.txt» или так: «d:/app/my_file.txt» Последние два варианта представляют собой абсолютный путь к файлу, то есть, полный путь, начиная с указания диска. Причем, обычно используют обратный слеш в качестве разделителя: так короче писать и такой путь будет корректно восприниматься как под ОС Windows, так и Linux. Первый же вариант – это относительный путь (относительно каталога с исполняемым файлом). Теперь, предположим, что мы хотим обратиться к файлу img.txt. Это можно сделать так: «images/img.txt» или так: «d:/app/images/img.txt» Для доступа к out.txt пути будут записаны так: «../out.txt»
«d:/out.txt» Обратите внимание, здесь две точки означают переход к родительскому каталогу, то есть, выход из каталога app на один уровень вверх. И, наконец, для доступа к файлу prt.dat пути запишутся так: «../parent/prt.dat»
«d:/ parent/prt.dat» Вот принцип, по которому прописываются пути к файлам. В нашем случае мы имеем текстовый файл «my_file.txt», который находится в том же каталоге, что и программа ex1.py, поэтому путь можно записать, просто указав имя файла:
file = open("my_file.txt")
В результате переменная file будет ссылаться на файловый объект, через который и происходит работа с файлами. Если указать неверный путь, например, так:
file = open("my_file2.txt")
то возникнет ошибка FileNotFoundError. Поэтому пути нужно прописывать аккуратно. Позже мы увидим, как можно избежать такой ошибки, чтобы программа не прерывалась при неверно указанном файле. Итак, функция open() по умолчанию открывает файл на чтение. Это значит, что в этом режиме мы можем только считывать информацию из файла, но не записывать. Как прочитать данные из файла? Для этого существует несколько методов у файлового объекта. Например, если выполнить метод:
print( file.read() )
то будет прочитан весь файл целиком и результат представлен в виде строки. Но сейчас мы видим с вами в консоли отображаются какие-то кракозябры. Почему? Все дело в несовпадении кодировок. В моем случае метод read() читает данные в кодировке windows-1251, а кодировка файла с текстом – UTF-8. Чтобы это поправить, в функции open() нужно явно указать кодировку файла через именованный аргумент encoding:
file = open("myfile.txt", encoding="utf-8" )
Теперь все работает корректно. Но, что если нам нужно прочитать из файла всего несколько символов? Для этого достаточно вызвать метод read() и первым аргументом указать максимальное количество читаемых символов, например:
print( file.read(4) )

Из файла будут считаны первые четыре символа. Правда, в консоли мы видим только три символа. Дело в том, что при кодировке UTF-8 в файл автоматически добавляется первый (невидимый) символ с шестнадцатиричным кодом: #FEFF Если мы снова вызовем метод:
print( file.read(4) )
то будут прочитаны следующие четыре символа. Вот эта стрелка (на рисунке) называется файловой позицией (file position), которая указывает, с какого места производить последующее считывание информации. Благодаря ей мы можем последовательно читать данные, просто вызывая метод read(). Когда доходим до конца файла, то здесь находится специальный символ EOF, означающий конец файла. При необходимости, мы можем управлять положением файловой позиции. Для этого существует специальный метод: file.seek(offset[, from_what]) Например, вот такая запись:
file.seek(0)
будет означать, что мы устанавливаем позицию в начало и тогда такие строчки:
print( file.read(4) ) file.seek(0) print( file.read(4) )
будут считывать одни и те же первые символы. Если же мы хотим узнать текущую позицию в файле, то следует вызвать метод tell:
pos = file.tell() print( pos )
Следующий полезный метод readline() позволяет построчно считывать информацию из текстового файла:
s = file.readline() print( s )
Здесь концом строки считается символ переноса ‘\n’, либо конец файла. Причем, этот спецсимвол переноса будет также присутствовать в строке. Мы в этом можем убедиться, вызвав дважды функцию:
print( file.readline() ) print( file.readline() )
Здесь в консоли строчки будут разделены пустой строкой. Это как раз из-за того, что один перенос идет из прочитанной строки, а второй добавляется самой функцией print(). Поэтому, если их записать вот так:
print( file.readline(), end="" ) print( file.readline(), end="" )
то вывод будет построчным с одним переносом. Если нам нужно последовательно прочитать все строчки из файла, то для этого обычно используют цикл for следующим образом:
for line in file: print( line, end="" )
Этот пример показывает, что объект файл является итерируемым и на каждой итерации возвращает очередную строку. Или же, все строчки можно прочитать методом:
s = file.readlines()
и тогда переменная s будет ссылаться на список с этими строками:
print( s )
Однако этот метод следует использовать с осторожностью, т.к. для больших файлов может возникнуть ошибка нехватки памяти для хранения полученного списка. По сути это все методы для считывания информации из файла. Осталось только добавить, что как только мы завершаем работу с файлом, его следует закрыть. Для этого используется метод close:
file.close()
Чтение файлов#
Посмотрим как считывать содержимое файлов, на примере файла r1.txt:
! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !
read #
Метод read — считывает весь файл в одну строку.
Пример использования метода read :
In [1]: f = open('r1.txt') In [2]: f.read() Out[2]: '!\nservice timestamps debug datetime msec localtime show-timezone year\nservice timestamps log datetime msec localtime show-timezone year\nservice password-encryption\nservice sequence-numbers\n!\nno ip domain lookup\n!\nip ssh version 2\n!\n' In [3]: f.read() Out[3]: ''
При повторном чтении файла в 3 строке, отображается пустая строка. Так происходит из-за того, что при вызове метода read , считывается весь файл. И после того, как файл был считан, курсор остается в конце файла. Управлять положением курсора можно с помощью метода seek .
readline #
Построчно файл можно считать с помощью метода readline :
In [4]: f = open('r1.txt') In [5]: f.readline() Out[5]: '!\n' In [6]: f.readline() Out[6]: 'service timestamps debug datetime msec localtime show-timezone year\n'
Но чаще всего проще пройтись по объекту file в цикле, не используя методы read. :
In [7]: f = open('r1.txt') In [8]: for line in f: . print(line) . ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !
readlines #
Еще один полезный метод — readlines . Он считывает строки файла в список:
In [9]: f = open('r1.txt') In [10]: f.readlines() Out[10]: ['!\n', 'service timestamps debug datetime msec localtime show-timezone year\n', 'service timestamps log datetime msec localtime show-timezone year\n', 'service password-encryption\n', 'service sequence-numbers\n', '!\n', 'no ip domain lookup\n', '!\n', 'ip ssh version 2\n', '!\n']
Если нужно получить строки файла, но без перевода строки в конце, можно воспользоваться методом split и как разделитель, указать символ \n :
In [11]: f = open('r1.txt') In [12]: f.read().split('\n') Out[12]: ['!', 'service timestamps debug datetime msec localtime show-timezone year', 'service timestamps log datetime msec localtime show-timezone year', 'service password-encryption', 'service sequence-numbers', '!', 'no ip domain lookup', '!', 'ip ssh version 2', '!', '']
Обратите внимание, что последний элемент списка — пустая строка.
Если перед выполнением split , воспользоваться методом rstrip , список будет без пустой строки в конце:
In [13]: f = open('r1.txt') In [14]: f.read().rstrip().split('\n') Out[14]: ['!', 'service timestamps debug datetime msec localtime show-timezone year', 'service timestamps log datetime msec localtime show-timezone year', 'service password-encryption', 'service sequence-numbers', '!', 'no ip domain lookup', '!', 'ip ssh version 2', '!']
seek #
До сих пор, файл каждый раз приходилось открывать заново, чтобы снова его считать. Так происходит из-за того, что после методов чтения, курсор находится в конце файла. И повторное чтение возвращает пустую строку.
Чтобы ещё раз считать информацию из файла, нужно воспользоваться методом seek , который перемещает курсор в необходимое положение.
Пример открытия файла и считывания содержимого:
In [15]: f = open('r1.txt') In [16]: print(f.read()) ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !
Если вызывать ещё раз метод read , возвращается пустая строка:
In [17]: print(f.read())
Но с помощью метода seek можно перейти в начало файла (0 означает начало файла):
In [18]: f.seek(0)
После того как с помощью seek курсор был переведен в начало файла, можно опять считывать содержимое:
In [19]: print(f.read()) ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !
Построчное чтение данных из файла
поручили написать программу на питоне, которая будет считывать данные с файла, при этом по строкам!
никаких идей, вижу питона в 1 раз. так что в панике, жду помощи!
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как правильно сделать построчное чтение txt файла, чтобы потом эти данные выводились в теге ?
У меня есть файл file.txt: Саша 12 руб. Рома 76 руб. Петя 120 руб. Маша 234 руб. Я пытаюсь.
Построчное чтение данных из файла
Есть фаил: selulhmb 83 86 77 82 glrdos 54 48 3 35 canryx 15 59 5 26 cdqqri 45 0 66 37 bxdsj 49.
Построчное чтение и обработка данных из файла.
Здравствуйте, я новичок в программировании и мне нужно решить следующую задачу, для решения которой.

Построчное чтение файла и использование данных в цикле
Здравствуйте, форумчане. Капаюсь (изучаю) в powershell-e и хочу сделать скрипт, который будет.
Регистрация: 11.11.2010
Сообщений: 79
ну код будет следующим
1 2 3
file_name = r"c:\file.txt" #путь к файлу file = open(file_name) #открываем файл line = file.readline() #считывает одну строчку
Щас всё дословно не расписать. А как насчёт почитать какую нить книгу по пайтону? Или учить нет желания?
Регистрация: 08.08.2011
Сообщений: 10
ya voobje-to sena celiy den i chitayu.. prosto eto moy perviy den s pitonom, mne chto-to ego rezko poruchili.
ujs.
Регистрация: 01.08.2011
Сообщений: 35
А файл в какой кодировке?
И что нужно делать с данными?
Регистрация: 08.08.2011
Сообщений: 10
eto obichniy fayl .txt!
mne nujno vzat iz nego informaciyu, vernee slova razdelennie zapatoy, prisvoit im znachenie, i propuskat pustie stroki, blank lines.
Регистрация: 01.08.2011
Сообщений: 35
Если файл в кодировке UTF-8, то один из способов такой
1 2 3 4 5 6 7 8 9 10
import codecs #Модуль для чтения в разных кодировках filename = ur'1.txt' #Имя фйла для чтения; u - имя в Юникоде; r - регулярные выражения (если бы в пути к файлу были значки \, то без r нужно было бы их 2 раза набирать, т.е \\ вмето \) try: #Для обработки отсутствия файла with codecs.open(filename, encoding = 'UTF-8') as file_object: #with закроет файл, если что-то пойдет не так for line in file_object: #такой подход как раз позволяет считывать по строкам его line = line.rstrip('\n') #убираем символы перевода строки справа print(line) #выводим на экран except IOError as er: #Обработка отсутствия файла print(u'Can\'t open the "" file'.format(er.filename)) #string.format позволяет отформатировать строку в нужном виде
Добавлено через 2 минуты
Сообщение от v panike =( 
eto obichniy fayl .txt!
mne nujno vzat iz nego informaciyu, vernee slova razdelennie zapatoy, prisvoit im znachenie, i propuskat pustie stroki, blank lines.
А что значит присвоить значение?
Добавлено через 10 минут
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import codecs filename = ur'1.txt' d = {} try: with codecs.open(filename, encoding = 'UTF-8') as file_object: for line in file_object: line = line.rstrip('\n') #удаляем в конце перевод строки words = line.split(',') #разделяем строку по запятым на новые строки for word in words: #проходим по всем полученным строкам word = word.strip() #удаляем пробелы слева и справа d[word] = d.get(word,0) + 1 #увеличиваем в словаре d значение по данному слову на 1 (если в словаре нет такого слова, то возвращается 0 через функцию get) except IOError as er: print(u'Can\'t open the "" file'.format(er.filename))
Добавлено через 3 минуты
Вывод на экран:
1 2 3
print(u'| '.format(u'Слово',u'Количество')) for key in d: print(u'| '.format(key,d[key]))
Добавлено через 4 минуты
Если нужно вывести по алфавиту, то нужно добавить одну строчку перед выводом, так как словарь d, который мы используем — не сортированный.
1 2 3 4 5
alphabaticaly_sorted_words = sorted(d.keys()) print(u'| '.format(u'Слово',u'Количество')) for key in alphabaticaly_sorted_words: print(u'| '.format(key,d[key]))
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
зря используешь скобки у print
во втором питоне это будет вычисление выражения или кортеж
1 2 3 4 5 6 7 8
>>> s = 'abcd' >>> print(s,) ('abcd',) >>> print(s, s) ('abcd', 'abcd') >>> print s, s abcd abcd >>>
Регистрация: 01.08.2011
Сообщений: 35
Никогда не использую 2 аргумента в print, использую str.format для вывода нескольких переменных.
В 3 Питоне print только как функция будет, лучше сразу привыкать.
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
![]()
Сообщение от bestol
В 3 Питоне print только как функция будет
она уже там есть больше двух лет
релизы
для второго питона лучше писать print именно как оператор, потому что скобки проделывают лишнее действие (вычисляют значение выражения)
а насчёт различий синтаксиса: существует, уже давно, скрипт 2to3.py, который входит в поставку третьего питона, он автоматически это дело переводит
![]()
5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
Сообщение от bestol 
В 3 Питоне print только как функция будет, лучше сразу привыкать.
и да, в Питоне 3 все строковые литералы — уже в Unicode
Сообщение от v panike =( 
razdelennie zapatoy
можно заюзать csv:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#!/usr/bin/env python3 from csv import DictReader from sys import argv, stderr from os.path import basename if len(argv) != 2: print('Usage: <> FILE'.format(basename(argv[0])), file=stderr) exit(1) try: with open(argv[1], 'r', encoding='utf-8') as csv_file: csv_reader = DictReader(csv_file, ['name', 'age', 'sex']) print('name'.ljust(20), 'age', 'sex') print('-' * 30) for row in csv_reader: print(' '.format(**row)) except Exception as e: print(e, file=stderr) exit(1)
[nameless@desktop python]$ cat data.csv john,35,m kate,20,f michael,14,m [nameless@desktop python]$ ./csv-parsing.py data.csv name age sex ------------------------------ john 35 m kate 20 f michael 14 m
Регистрация: 08.08.2011
Сообщений: 10
ya doljna chitat iz fayla slova, naprimer, tam
andrey, osipov, 17, student ,3
14/07/2011, matematika,
16/07/2011, ekonomika,
19/07/2011, filosofiya
a programa chitat doljna pervuyu stroku i prisvaivat :
ima: andrey, familiya: osipov, vozrast:17, polojenie: student, kolichestvo ekzamenov: 3,
potom programma doljna ponimat, chto poslednee chislo(zdes 3) eto kolichestvo ego ekzamenov i doljna pisat:
exam(1)= 14/07/2011, matematika,
exam(2)=16/07/2011, ekonomika,
exam(3)=19/07/2011, filosofiya
![]()
5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
Ну хотя бы так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
#!/usr/bin/env python3 from csv import reader from sys import argv, stderr from os.path import basename from datetime import date students = [] if len(argv) != 2: print('Usage: <> FILE'.format(basename(argv[0])), file=stderr) exit(1) try: with open(argv[1], 'r', encoding='utf-8') as csv_file: csv_reader = reader(csv_file, skipinitialspace=True) for row in csv_reader: if not row: continue name, surname, age, rank, exams_count = row student = dict(name=name, surname=surname, age=int(age), rank=rank, exams_count=int(exams_count)) exams = [] for _ in range(int(exams_count)): exam_date, exam_name = next(csv_reader) date_list = [int(fld) for fld in exam_date.split('/')] date_list.reverse() parsed_date = date(*date_list) exams.append((parsed_date, exam_name)) student['exams'] = exams students.append(student) for student in students: print('Student: name = , surname = , age = , \ rank = , exams count = '.format(**student)) print('Exams:') for exam_date, exam_name in student['exams']: print(exam_date, exam_name) print() except Exception as e: print(e, file=stderr) exit(1)
[nameless@desktop python]$ cat data.csv andrey, osipov, 17, student,3 14/07/2011, matematika 16/07/2011, ekonomika 19/07/2011, filosofiya [nameless@desktop python]$ ./csv-parsing.py data.csv Student: name = andrey, surname = osipov, age = 17, rank = student, exams count = 3 Exams: 2011-07-14 matematika 2011-07-16 ekonomika 2011-07-19 filosofiya [nameless@desktop python]$
В данном случае, правда, не имеет особого смысла использовать модуль csv. Можно, в принципе, обойтись простым «split»
Запись файлов
Писать в файлы позволяет та же функция open() , которую мы использовали на прошлом занятии, однако теперь укажем дополнительный аргумент «w» — write:
>>> with open("referats.txt", "w", encoding="utf-8") as f: # файл открыт . # Записываем строку в файл, "\n" - символ переноса строки . f.write("Используются тексты с Яндекс.Рефератов https://yandex.ru/referats/\n") . # Запишем в файл еще одну строку . f.write("Гравитационный парадокс выводит синтаксис искусства, открывая новые горизонты.\n")
Напомним, что следует следить за отступами и писать в файл после выхода из блока with уже нельзя:
>>> with open("function.txt", "w", encoding="utf-8") as f: . f.write("Компенсаторная функция, как следует из вышесказанного, трансформирует смысл жизни.\n") >>> if not f.writable: . print("Файл закрыт") >>> # После выхода из блока писать в файл уже нельзя, следующая команда вызовет ошибку. Как всегда следите за отступами! >>> f.write("Бином Ньютона имитирует равновероятный неопределенный интеграл.\n")
Если в файл хочется записать одну большую строку с множеством переносом строк, а ставить много \n не хочется, то можно воспользоваться тройными кавычками, которые позволяют задавать “многострочные” строки и свободно использовать внутри них одинарные и двойные кавычки:
>>> text = """Альтиметр редуцирует лазерный ньютонометр. Как отмечает А.А.Потебня, . "строфоид" начинает период. Необходимым и достаточным условием отрицательности . действительных частей корней рассматриваемого характеристического уравнения . является то, что гироскопический прибор преобразует цикл. Действительно, . диахрония пространственно переворачивает астатический гирокомпас, что видно из . уравнения кинетической энергии ротора. Погрешность изготовления неумеренно . определяет резкий кинетический момент. Слово, несмотря на некоторую . погрешность, поступательно диссонирует подвес. Апостроф' порождает неопределенность. . """ >>> with open("multiline.txt", "w", encoding="utf-8") as f: . f.write(text)
Следует отметить, что во всех предыдущих примерах, если файла с таким именем не существовало, то он создавался, а если существовал, то он переписывался. Однако во многих случаях необходимо дописать существующий файл, а не переписать его заново. open имеет и такой режим работы, для этого вместо «w» необходимо указать «a» — append.
>>> text = """Экситон не входит своими составляющими, что очевидно, . в силы нормальных реакций связей, так же как и межатомный ПИГ, . составляя уравнения Эйлера для этой системы координат. . """ >>> # Создаем новый файл >>> with open("physics.txt", "w", encoding="utf-8") as f: . f.write(text) >>> >>> # Теперь файл закрыт. Перепишем его >>> >>> # Стираем старый файл, создаем новый с тем же именем и открываем его для записи: >>> with open("physics.txt", "w", encoding="utf-8") as f: . f.write("При погружении в жидкий кислород фотон искажает разрыв.\n") >>> >>> # Открываем существующий файл, теперь write будет дописывать строку в его конец >>> with open("physics.txt", "a", encoding="utf-8") as f: . f.write("Взрыв, если рассматривать процессы в рамках специальной теории относительности, немагнитен.\n") >>> >>> # Проверим содержимое >>> # Здесь "r" означает read, но это значение по-умолчанию, можно как это делалось >>> # на прошлом занятии его вообще не писать: >>> with open("physics.txt", "r", encoding="utf-8") as f: . first_line = f.readline() # читаем первыую строку . # Проверяем, что строка начинается с данной подстроки: . if first_line.startswith("При погружении в жидкий"): . print("От экситона не осталось и следа") . second_line = f.readline().strip() # читаем вторую строку и отрезаем ей \n . if second_line.endswith("теории относительности, немагнитен."): . print("Относительность относительна")
Чтение файлов построчно
Иногда бывает такое, что файлы очень большие и прочитать их целиком совсем никак не получается. Что, если вам нужно прочитать файл на 16 миллиардов строк, который весит десятки терабайт?
Да что там 16 миллиардов. Студенты порой жалуются, что на экзамене файл весит 50МБ и их программы долго его читают. Это не от того, что файл большой. Просто читают неправильно.
Какое здесь может быть решение? Очевидно, надо читать построчно. Но как?
У объекта, который возвращает функция open() есть много методов. В том числе метод .readlines() . По названию понятно, что делает этот метод — читает строки. Однако, в нашей задаче этот метод никак не поможет. Разберемся почему:
>>> file = open('borodino.txt') >>> lines = file.readlines() >>> print(type(lines)) >>> print(lines[:5]) >>> file.close() class 'list'> ['БОРОДИНО\n', '— Скажи-ка, дядя, ведь не даром\n', 'Москва, спаленная пожаром,\n', 'Французу отдана?\n', 'Ведь были ж схватки боевые,\n']
Как мы видим, метод readlines() создает список строк всего файла. То есть тоже читает файл целиком.
Как же правильно прочитать построчно?
>>> with open('borodino.txt') as file: . i = 0 . for line in file: . print(line, end='') . i += 1 . if i >= 5: . break БОРОДИНО — Скажи-ка, дядя, ведь не даром Москва, спаленная пожаром, Французу отдана? Ведь были ж схватки боевые,
При таком способе чтения python не будет считывать файл целиком, а будет считать построчно. То есть при чтении какого-угодно файла одновременно мы будем читать только одну строку. И 16 терабайт пройдут незаметно.
Домашнее задание
Для каждого варианта своё задание.
- Программа должна спрашивать у пользователя слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл каждое из введённых слов задом наперёд (каждое слово на отдельной строчке), удалив из них каждую третью букву.
- Программа должна спрашивать у пользователя слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл те из введённых слов, длина которых больше 5 символов (каждое слово на отдельной строчке).
- Программа должна спрашивать у пользователя слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл все введённые слова, удалив в первом слове первый символ, во втором слове первые два символа, в третьем – первые три символа и т.д. (каждое слово на отдельной строчке).
- Программа должна спрашивать у пользователя латинские слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл те из введённых слов, которые с большой вероятностью являются инфинитивами (каждое слово на отдельной строчке). [Словами типа esse можно не заморачиваться, но пассивный инфинитив надо учесть.]
- Программа должна спрашивать у пользователя латинские слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл те из введённых слов, которые с большой вероятностью являются формой 3-го лица пассива настоящего времени (каждое слово на отдельной строчке). [Нерегулярными словами можно не заморачиваться.]
- Программа должна получить от пользователя подряд 7 чисел, а после этого записать в файл 7 строчек, состоящих из соответствующего числа букв X (на первой строчке количество иксов равно первому введённому числу, на второй – второму и т. д.; если введённое число отрицательно, иксов на этой строчке быть не должно). В задаче обязательно пользоваться списком, а не 7 переменными!
- Программа должна получить от пользователя подряд 8 слов, а после этого записать в файл 4 строчки с попарными склейками этих слов: на 1-й строчке – склеенные слова 1 и 2, на второй – 3 и 4 и т. д. В задаче обязательно пользоваться списком, а не 8 переменными!
