# Ввод и вывод в языке Пайтон

# input() - ввод
# В инпуте в круглых скобках ф-и можно вводить сообщения и подсказки для пользователя.
x = input('Введите что-нибудь ')  # и использовать то, что ввел пользователь, в нашем коде (присвоить переменной).

# output() - вывод
# Также мы можем выводить что-то
print('Распечатай что-нибудь ' + x)  # будет выведено на экран то, что ввел пользователь

# Существует также возможность ввода информации в нашу программу не только с клавиатуры пользователем,
# но, например, из файла.
# Также, аналогично, мы можем выводить информацию не только в терминальное окно, но и в файл
# и сохранять на жестком диске компьютера


# ---------------------- Как читать из текстовых файлов ---------------------------------

# Чтобы получить информацию из файла, нужно сначала его открыть.
# Открыть файл можно в разных режимах. Можно так открыть, что файл удалиться или потеряет свое содержимое.
# Поэтому, с этапом открытия нужно быть достаточно осторожным.

# Преобразование файлов.
# На этом этапе мы импортируем данные из файла в переменную, в объекты, там с ними работаем.

# Последний шаг - закрытие файла - очень важен. Особенно, когда мы будем не читать из файла, а записывать что-то в него.
# Если мы не закроем файл после произведения с ним каких-то манипуляций, он может быть поврежден.

# Файл может располагаться в любой папке.

# Открываем файл при помощи команды open() с указанием пути к файлу в круглых скобках и в кавычках.
text = open('C:/Users/Lenovo 330s/Documents/UII/text.txt')
# Если файл находится в одной дирректории со скриптом, то можно указать просто его имя.
# Переменная text - это объект, который содержит информацию о файле и из которого уже можно извелчь данные.
# Извлечение данных это следующий этап. Для этого есть разные способы.
# Например, команда read()
contents = text.read()  # извлекается все содержимое из файла в виде строки и помещается в переменную
print(contents)  # вывод содержимого

# Также, для вывода текста на печать построчно, можно использовать цикл
for line in text:   # выводим построчно
    print(line, end='')
text.close()  # обязательно закрываем файл. Это освободает занятые файлом ресурсы

# При выводе, между строками образуются пустые строки, хотя в исходном файле пустых строк нет.
# Дело в том, что ф-я print() добавляет пустую строку автоматически. Это делает необязательный параметр этой ф-и end,
# который по умолчанию имеет значение end='\n' - код перехода на новую строку. Мы можем указать его явно и будет
# то же самое.
# Но, если указать пусту строку end='', то все строки по идее будут выведены в одну линию.
# Но, на деле, и чезнет пустая строка между строкам. Но, текс будет выведен построчкно.
# Потому что переносы уже стоят в изначальом тексте.
# То есть, выражением end='\n' мы отменяем значение по умолчанию

# В команде open() есть режимы:
# 'r' - открытие на чтение (является значением по умолчанию)
# 'w' - открытие на запись, старое содержимое файла удаляется, если файла не существует, создается новый и затем туда
# можно что-то записывать.
# С этим режимом надо быть крайне осторожным.
# 'х' - открытие на запись, если файла не существует, иначе искоючение
# 'a' - открытие на дозапись, информация добавляется в конец файла
# 'b' - открытие в двоичном режиме, то есть файл можно читать побитно
# 't' - открытие в текстовом режиме (является значением по умолчанию)
# '+' - открытие на чтение и запись

# При переборе строки в цикле, мы можем делать с ней все, что нам надо.
# Например, мы можем выбирать какие-то слова по каким-то признакам
# Мы можем распечатать все строки, если в них сожержится слово 'let', например

text = open('C:/Users/Lenovo 330s/Documents/UII/text.txt')  # открываем файл
for line in text:   # выводим построчно
    if 'let' in line.lower():  # если в строке есть слово 'let' (приводим все буквы в нижний регистр)
     print(line, end='')  # выводим эту строку на экран
text.close()  # обязательно закрываем файл, особенно после того, как мы открыли его в режиме записи.

# В Пайтоне версии 2.6 появилась возможность открвать файл при помощи оператора with
# Этот оператор применяется ко всем объектам, которые поддерживают этот оператор.
# Это менеджер контекста, который помогает бороться с забыванием закрытия файла. После него не надо закрывать файл.

with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    # То есть, мы открваем файл по указанному пути, и дальше обращаеся к нему, как к text (через эту переменную)
    # Дальше мы можем делать с ним все, то же самое,
    for line in text:
        if 'let' in line.lower():
            print(line, end='')
    # но теперь нам не нужно закрывать файл. Оператор with автоматически закрывает файл после работы с ним.

# Конструкция with позволяет открыть несколько файлов одновременно:
# with open(C:/.......text_1.txt,) as text_, open(C:/.......text_2.txt,) as text_2:
# Это то же самое, что открыть эти файлы каскадно
# with open(C:/.......text_1.txt,) as text_:
#     with open(C:/.......text_2.txt,) as text_2:

# Простое считывание / открытие файла в режиме чтения.
# Если файл находится в одно дирректории, то указываем просто имя файла
f = open('data.txt')
content = f.read()
print('\n\nВыводим контент:\n', content)
f.close()

# ---------------------------- Методы readline() readlines()----------------------------
# Можно считывать одну строку
with open('data.txt') as f:  # открываем файл
    line = f.readline()  # считываем первую строку и передаем переменной
    print(f'Выводим первую строку {line}')


# Методы readline() считывает одну строку
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    line = text.readline()  # считываем одну строку
    # и дальше распечатываем строку
    print('\nПолучаем первую строку ', line)  # получаем первую строку

# Также мы можем построчно читать и распетывать с помощью цикла while
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    line = text.readline()  # используем метод readline
    while line:  # если меременная line не пустая, запускается цикл для вывода текста
        print(line, end='')  # вывод без пустых строк между строками
        line = text.readline()
    # при таком выражении, распечатываются все строки текста.


# Доступ к строкам в формате list
# Для этого используется метод readlines()  - читает много строк
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    lines = text.readlines()  # используем метод readlines
    # Здесь нам цикл уже не нужен. Весь текст, который находится в файле, будет прочитан и сохранен в списке.
    # Каждая строка будет элементом этого списка.
print(lines)
# Whisper words of wisdom, let it be['When I find myself in times of trouble, Mother Mary comes to me\n',
# 'Speaking words of wisdom, let it be\n', ......

# Получаем весь текст в виде одной длинной строки. В конце каждой строки установлен знак перехода нановуж строку \n',
# который не виден явно в файле. Но, он присутствует, так как каждая строчк в тексте начинается с новой строки.
# И далее мы можем работать с этим списком, как и со всеми остальными списками.
# Например, в цикле:
for line in lines:
    print(line)
    # Вы воде получаем то же самое.
# И, так как мы получаем при помощи метсда readlines() список из строчек текстового файла, то мы можем применять здесь
# какие-то манипуляции со списками. Например, мы можем распечатать список в обратном порядке, указав такой код
for line in lines[::-1]:
    print(line)
# Теперь, на выходе мы получили последние строки первыми. То есть, мы переставили строки в обратном порядке.
# Итак, метод readlines() читает содержимое файла и помещает в список строки этого файла как элементы этого списка.

# Метод readline() читает одну строку.
# Метод read() читает весь файл, и, в случае текстового файла, весь этот файл помещается в одну строку.
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    text = text.read()  #
print(text)
# В этом случае мы получаем весь текст и нам не нужно ничего перебирать. Мы можем его распечатать как обычную строку.

# Методы read() и readlines() в случае больших файлов, когда используется большое количество информации,
# лучше не использовать. В случае больших файлов, лучше использовать readfile() - чтение построчно,
# чтобы не перегружать память компьютера.


# ----------------------------- Как записывать в текстовые файлы -------------------------------
# Запись в файл, если он новый или чистый, происходит с преффиксом 'w'
with open('data_new', 'w') as f:  # открываем новый файл
    f.write('Это новый файл')  # записываем в файл
    # после выполнения скрипта, в подкаталоге появился этот новый файл


# В этот файл можно дописывать информацию построчно
# Для этого создадим список
data = ['1', '2', '3']
with open('data_new', 'w') as f:  # открываем новый файл
    f.writelines(data)  # дозаписываем в файл наш список. Каждый элемент списка будет записан в одну строчку
    # Элементы списка должны быть строками


colors_lst = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
# Далее, мы должны при помощи той же команды open() открыть файл.
with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'w') as rainbow_colors:
    # Создаем новый файл. 'w' - запис в файл.
    # дальше делаем цикл
    for color in colors_lst:
        print(color, file=rainbow_colors)  # делаем запись в файл.
        # Запускаем этот файл. Но, на выводе ничего не получаем. Но, в указанной папке появляется файл
        # rainbow_colors.txt со списком цветов.

# Если мы добавим какой-то новый цвет в конец списка, и снова его запустим,
# colors_lst = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet', 'green dark']
# with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'w') as rainbow_colors:
#     for color in colors_lst:
#         print(color, file=rainbow_colors)
        # файл будет перезаписан и список обновиться.
# Если же мы, изменив содержимое строки, и поменяем название файла, то появится новый файл с измененной строкой.
# А старый файл останется без изменнений.

# Теперь попробуем прочитать из этого файла.
# Для этого создаем пустой список
# colors_lst = []
# with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'r') as rainbow_colors:  # здесь ставим 'r' -чтение
#     for color in rainbow_colors:
#         colors_lst.append(color)  # здесь будет не печатать список, а добавлять в него

# Теперь, чтобы увидеть его содержимое, нам надо его распечатать
print(colors_lst)
# ['red\n', 'orange\n', 'yellow\n', 'green\n', 'blue\n', 'indigo\n', 'violet\n']
# Получаем содержимое файла со знаком перехода на новую строку, так как он сожержится в файле.
# Мы можем в методе ptint() обозначить параметр end='', для переноса слов каждую на новую строку.
# Но, есть еще такой метод strip() для строк. Он обрезает символ, указываемый в параметре.
colors_lst = []
with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'r') as rainbow_colors:  # здесь ставим 'r' - чтение
    for color in rainbow_colors:
        colors_lst.append(color.strip('\n'))  # добавляем метод strip()
# ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
# Получаем список без символа перехода на новую строку.

# Что делать, если мы хотим добавить существующий текстовый файл, а не создавать его заново?
# Для этого, вместо параметра 'r' нужно использовать 'a' (append - добавлять)
with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'a') as rainbow_colors:  # здесь ставим 'a' -добавить
    print('light yellow', file=rainbow_colors)
    print('dark blue', file=rainbow_colors)
    # Получаем список с добавленными цветами.
    # red
    # orange
    # yellow
    # green
    # blue
    # indigo
    # violet
    # light yellow
    # dark blue

# --------------------------- Считывание из файла побайтно -------------------------------

with open('data.txt', 'r') as s:
    data = s.read(10)  # считываем 10 байт
    print(data, type(data))
    # Получили данные, которые хранятся в 10 байтах
    # 123
    # Hello
    # Вывели класс
    # <class 'str'>



40ebb1c18d99312a137284a081c4bf835b15fc96
<mask token>

<mask token>
print('Распечатай что-нибудь ' + x)
<mask token>
print(contents)
for line in text:
    print(line, end='')
text.close()
<mask token>
for line in text:
    if 'let' in line.lower():
        print(line, end='')
text.close()
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    for line in text:
        if 'let' in line.lower():
            print(line, end='')
<mask token>
print("""

Выводим контент:
""", content)
f.close()
with open('data.txt') as f:
    line = f.readline()
    print(f'Выводим первую строку {line}')
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    line = text.readline()
    print('\nПолучаем первую строку ', line)
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    line = text.readline()
    while line:
        print(line, end='')
        line = text.readline()
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    lines = text.readlines()
print(lines)
for line in lines:
    print(line)
for line in lines[::-1]:
    print(line)
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    text = text.read()
print(text)
with open('data_new', 'w') as f:
    f.write('Это новый файл')
<mask token>
with open('data_new', 'w') as f:
    f.writelines(data)
<mask token>
with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'w'
    ) as rainbow_colors:
    for color in colors_lst:
        print(color, file=rainbow_colors)
print(colors_lst)
<mask token>
with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'r'
    ) as rainbow_colors:
    for color in rainbow_colors:
        colors_lst.append(color.strip('\n'))
with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'a'
    ) as rainbow_colors:
    print('light yellow', file=rainbow_colors)
    print('dark blue', file=rainbow_colors)
with open('data.txt', 'r') as s:
    data = s.read(10)
    print(data, type(data))

x = input('Введите что-нибудь ')
print('Распечатай что-нибудь ' + x)
text = open('C:/Users/Lenovo 330s/Documents/UII/text.txt')
contents = text.read()
print(contents)
for line in text:
    print(line, end='')
text.close()
text = open('C:/Users/Lenovo 330s/Documents/UII/text.txt')
for line in text:
    if 'let' in line.lower():
        print(line, end='')
text.close()
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    for line in text:
        if 'let' in line.lower():
            print(line, end='')
f = open('data.txt')
content = f.read()
print("""

Выводим контент:
""", content)
f.close()
with open('data.txt') as f:
    line = f.readline()
    print(f'Выводим первую строку {line}')
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    line = text.readline()
    print('\nПолучаем первую строку ', line)
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    line = text.readline()
    while line:
        print(line, end='')
        line = text.readline()
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    lines = text.readlines()
print(lines)
for line in lines:
    print(line)
for line in lines[::-1]:
    print(line)
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    text = text.read()
print(text)
with open('data_new', 'w') as f:
    f.write('Это новый файл')
data = ['1', '2', '3']
with open('data_new', 'w') as f:
    f.writelines(data)
colors_lst = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'w'
    ) as rainbow_colors:
    for color in colors_lst:
        print(color, file=rainbow_colors)
print(colors_lst)
colors_lst = []
with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'r'
    ) as rainbow_colors:
    for color in rainbow_colors:
        colors_lst.append(color.strip('\n'))
with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'a'
    ) as rainbow_colors:
    print('light yellow', file=rainbow_colors)
    print('dark blue', file=rainbow_colors)
with open('data.txt', 'r') as s:
    data = s.read(10)
    print(data, type(data))

# Ввод и вывод в языке Пайтон

# input() - ввод
# В инпуте в круглых скобках ф-и можно вводить сообщения и подсказки для пользователя.
x = input('Введите что-нибудь ')  # и использовать то, что ввел пользователь, в нашем коде (присвоить переменной).

# output() - вывод
# Также мы можем выводить что-то
print('Распечатай что-нибудь ' + x)  # будет выведено на экран то, что ввел пользователь

# Существует также возможность ввода информации в нашу программу не только с клавиатуры пользователем,
# но, например, из файла.
# Также, аналогично, мы можем выводить информацию не только в терминальное окно, но и в файл
# и сохранять на жестком диске компьютера


# ---------------------- Как читать из текстовых файлов ---------------------------------

# Чтобы получить информацию из файла, нужно сначала его открыть.
# Открыть файл можно в разных режимах. Можно так открыть, что файл удалиться или потеряет свое содержимое.
# Поэтому, с этапом открытия нужно быть достаточно осторожным.

# Преобразование файлов.
# На этом этапе мы импортируем данные из файла в переменную, в объекты, там с ними работаем.

# Последний шаг - закрытие файла - очень важен. Особенно, когда мы будем не читать из файла, а записывать что-то в него.
# Если мы не закроем файл после произведения с ним каких-то манипуляций, он может быть поврежден.

# Файл может располагаться в любой папке.

# Открываем файл при помощи команды open() с указанием пути к файлу в круглых скобках и в кавычках.
text = open('C:/Users/Lenovo 330s/Documents/UII/text.txt')
# Если файл находится в одной дирректории со скриптом, то можно указать просто его имя.
# Переменная text - это объект, который содержит информацию о файле и из которого уже можно извелчь данные.
# Извлечение данных это следующий этап. Для этого есть разные способы.
# Например, команда read()
contents = text.read()  # извлекается все содержимое из файла в виде строки и помещается в переменную
print(contents)  # вывод содержимого

# Также, для вывода текста на печать построчно, можно использовать цикл
for line in text:   # выводим построчно
    print(line, end='')
text.close()  # обязательно закрываем файл. Это освободает занятые файлом ресурсы

# При выводе, между строками образуются пустые строки, хотя в исходном файле пустых строк нет.
# Дело в том, что ф-я print() добавляет пустую строку автоматически. Это делает необязательный параметр этой ф-и end,
# который по умолчанию имеет значение end='\n' - код перехода на новую строку. Мы можем указать его явно и будет
# то же самое.
# Но, если указать пусту строку end='', то все строки по идее будут выведены в одну линию.
# Но, на деле, и чезнет пустая строка между строкам. Но, текс будет выведен построчкно.
# Потому что переносы уже стоят в изначальом тексте.
# То есть, выражением end='\n' мы отменяем значение по умолчанию

# В команде open() есть режимы:
# 'r' - открытие на чтение (является значением по умолчанию)
# 'w' - открытие на запись, старое содержимое файла удаляется, если файла не существует, создается новый и затем туда
# можно что-то записывать.
# С этим режимом надо быть крайне осторожным.
# 'х' - открытие на запись, если файла не существует, иначе искоючение
# 'a' - открытие на дозапись, информация добавляется в конец файла
# 'b' - открытие в двоичном режиме, то есть файл можно читать побитно
# 't' - открытие в текстовом режиме (является значением по умолчанию)
# '+' - открытие на чтение и запись

# При переборе строки в цикле, мы можем делать с ней все, что нам надо.
# Например, мы можем выбирать какие-то слова по каким-то признакам
# Мы можем распечатать все строки, если в них сожержится слово 'let', например

text = open('C:/Users/Lenovo 330s/Documents/UII/text.txt')  # открываем файл
for line in text:   # выводим построчно
    if 'let' in line.lower():  # если в строке есть слово 'let' (приводим все буквы в нижний регистр)
     print(line, end='')  # выводим эту строку на экран
text.close()  # обязательно закрываем файл, особенно после того, как мы открыли его в режиме записи.

# В Пайтоне версии 2.6 появилась возможность открвать файл при помощи оператора with
# Этот оператор применяется ко всем объектам, которые поддерживают этот оператор.
# Это менеджер контекста, который помогает бороться с забыванием закрытия файла. После него не надо закрывать файл.

with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    # То есть, мы открваем файл по указанному пути, и дальше обращаеся к нему, как к text (через эту переменную)
    # Дальше мы можем делать с ним все, то же самое,
    for line in text:
        if 'let' in line.lower():
            print(line, end='')
    # но теперь нам не нужно закрывать файл. Оператор with автоматически закрывает файл после работы с ним.

# Конструкция with позволяет открыть несколько файлов одновременно:
# with open(C:/.......text_1.txt,) as text_, open(C:/.......text_2.txt,) as text_2:
# Это то же самое, что открыть эти файлы каскадно
# with open(C:/.......text_1.txt,) as text_:
#     with open(C:/.......text_2.txt,) as text_2:

# Простое считывание / открытие файла в режиме чтения.
# Если файл находится в одно дирректории, то указываем просто имя файла
f = open('data.txt')
content = f.read()
print('\n\nВыводим контент:\n', content)
f.close()

# ---------------------------- Методы readline() readlines()----------------------------
# Можно считывать одну строку
with open('data.txt') as f:  # открываем файл
    line = f.readline()  # считываем первую строку и передаем переменной
    print(f'Выводим первую строку {line}')


# Методы readline() считывает одну строку
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    line = text.readline()  # считываем одну строку
    # и дальше распечатываем строку
    print('\nПолучаем первую строку ', line)  # получаем первую строку

# Также мы можем построчно читать и распетывать с помощью цикла while
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    line = text.readline()  # используем метод readline
    while line:  # если меременная line не пустая, запускается цикл для вывода текста
        print(line, end='')  # вывод без пустых строк между строками
        line = text.readline()
    # при таком выражении, распечатываются все строки текста.


# Доступ к строкам в формате list
# Для этого используется метод readlines()  - читает много строк
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    lines = text.readlines()  # используем метод readlines
    # Здесь нам цикл уже не нужен. Весь текст, который находится в файле, будет прочитан и сохранен в списке.
    # Каждая строка будет элементом этого списка.
print(lines)
# Whisper words of wisdom, let it be['When I find myself in times of trouble, Mother Mary comes to me\n',
# 'Speaking words of wisdom, let it be\n', ......

# Получаем весь текст в виде одной длинной строки. В конце каждой строки установлен знак перехода нановуж строку \n',
# который не виден явно в файле. Но, он присутствует, так как каждая строчк в тексте начинается с новой строки.
# И далее мы можем работать с этим списком, как и со всеми остальными списками.
# Например, в цикле:
for line in lines:
    print(line)
    # Вы воде получаем то же самое.
# И, так как мы получаем при помощи метсда readlines() список из строчек текстового файла, то мы можем применять здесь
# какие-то манипуляции со списками. Например, мы можем распечатать список в обратном порядке, указав такой код
for line in lines[::-1]:
    print(line)
# Теперь, на выходе мы получили последние строки первыми. То есть, мы переставили строки в обратном порядке.
# Итак, метод readlines() читает содержимое файла и помещает в список строки этого файла как элементы этого списка.

# Метод readline() читает одну строку.
# Метод read() читает весь файл, и, в случае текстового файла, весь этот файл помещается в одну строку.
with open('C:/Users/Lenovo 330s/Documents/UII/text.txt') as text:
    text = text.read()  #
print(text)
# В этом случае мы получаем весь текст и нам не нужно ничего перебирать. Мы можем его распечатать как обычную строку.

# Методы read() и readlines() в случае больших файлов, когда используется большое количество информации,
# лучше не использовать. В случае больших файлов, лучше использовать readfile() - чтение построчно,
# чтобы не перегружать память компьютера.


# ----------------------------- Как записывать в текстовые файлы -------------------------------
# Запись в файл, если он новый или чистый, происходит с преффиксом 'w'
with open('data_new', 'w') as f:  # открываем новый файл
    f.write('Это новый файл')  # записываем в файл
    # после выполнения скрипта, в подкаталоге появился этот новый файл


# В этот файл можно дописывать информацию построчно
# Для этого создадим список
data = ['1', '2', '3']
with open('data_new', 'w') as f:  # открываем новый файл
    f.writelines(data)  # дозаписываем в файл наш список. Каждый элемент списка будет записан в одну строчку
    # Элементы списка должны быть строками


colors_lst = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
# Далее, мы должны при помощи той же команды open() открыть файл.
with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'w') as rainbow_colors:
    # Создаем новый файл. 'w' - запис в файл.
    # дальше делаем цикл
    for color in colors_lst:
        print(color, file=rainbow_colors)  # делаем запись в файл.
        # Запускаем этот файл. Но, на выводе ничего не получаем. Но, в указанной папке появляется файл
        # rainbow_colors.txt со списком цветов.

# Если мы добавим какой-то новый цвет в конец списка, и снова его запустим,
# colors_lst = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet', 'green dark']
# with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'w') as rainbow_colors:
#     for color in colors_lst:
#         print(color, file=rainbow_colors)
        # файл будет перезаписан и список обновиться.
# Если же мы, изменив содержимое строки, и поменяем название файла, то появится новый файл с измененной строкой.
# А старый файл останется без изменнений.

# Теперь попробуем прочитать из этого файла.
# Для этого создаем пустой список
# colors_lst = []
# with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'r') as rainbow_colors:  # здесь ставим 'r' -чтение
#     for color in rainbow_colors:
#         colors_lst.append(color)  # здесь будет не печатать список, а добавлять в него

# Теперь, чтобы увидеть его содержимое, нам надо его распечатать
print(colors_lst)
# ['red\n', 'orange\n', 'yellow\n', 'green\n', 'blue\n', 'indigo\n', 'violet\n']
# Получаем содержимое файла со знаком перехода на новую строку, так как он сожержится в файле.
# Мы можем в методе ptint() обозначить параметр end='', для переноса слов каждую на новую строку.
# Но, есть еще такой метод strip() для строк. Он обрезает символ, указываемый в параметре.
colors_lst = []
with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'r') as rainbow_colors:  # здесь ставим 'r' - чтение
    for color in rainbow_colors:
        colors_lst.append(color.strip('\n'))  # добавляем метод strip()
# ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
# Получаем список без символа перехода на новую строку.

# Что делать, если мы хотим добавить существующий текстовый файл, а не создавать его заново?
# Для этого, вместо параметра 'r' нужно использовать 'a' (append - добавлять)
with open('C:/Users/Lenovo 330s/Documents/UII/rainbow_colors.txt', 'a') as rainbow_colors:  # здесь ставим 'a' -добавить
    print('light yellow', file=rainbow_colors)
    print('dark blue', file=rainbow_colors)
    # Получаем список с добавленными цветами.
    # red
    # orange
    # yellow
    # green
    # blue
    # indigo
    # violet
    # light yellow
    # dark blue

# --------------------------- Считывание из файла побайтно -------------------------------

with open('data.txt', 'r') as s:
    data = s.read(10)  # считываем 10 байт
    print(data, type(data))
    # Получили данные, которые хранятся в 10 байтах
    # 123
    # Hello
    # Вывели класс
    # <class 'str'>


