from datetime import datetime

# Aby uzyskać dostęp do pliku, należy zacząć od wywołania funckji open.
# Na przykład, aby zapisać dane do pliku, musimy użyć open z opcją mode='w'

plik = open('nowy_plik.txt', mode='w', encoding='utf-8')
print('Obiekt pliku:', plik)

# Dwa sposoby zapisywanie tekstu do pliku:
# 1) metody wywoływane na obiekcie pliku.
# Uwaga - one nie dopisują znaku nowej linii.
plik.write('Ala ma kota')
plik.write(' i psa.\n')
lista = ['Ewa ma chomika.', 'Ula ma rybki.\n', 'Ostatni element listy.\n']
plik.writelines(lista)

# 2) funkcja print z parametrem file
print('Bieżący czas:', datetime.now(), file=plik)
print('Gdańsk', 'Sopot', 'Gdynia', sep=';', file=plik)

# Gdy kończymy korzystać z pliku, to należy go zamknąć.
plik.close()

# Najbardziej zalecany sposób zamykania plików, to jest otwieranie ich w ramach konstrukcji with.
# Z otwartego pliku można korzystać wewnątrz bloku with,
# a w momencie, gdy z niego wychodzimy, Python automatycznie zamknie otwarty plik.
# Zaletą tego podejścia jest to, że plik zostanie od razu zamknięty także w przypadku błędów.

# Przy okazji tryby otwarcia pliku:
# mode='r' - odczyt
# mode='w' - plik zostanie utworzony, a gdyby już istniał, to jego stara treść zostanie skasowana,
# mode='x' - jeśli nie istniał, to plik zostanie utworzony, ale gdyby istniał, to polecenie kończy się błędem, a stary plik pozostaje nienaruszony,
# mode='a' - plik zostanie utworzony, a gdyby już istniał, to ten program zacznie dopisywać dane na końcu pliku.
# mode='w+' - odczyt i zapisz jednocześnie (raczej nie używa się dla plików tekstowych)
# dopisanie litery b, np. mode='rb' - otwarcie w trybie binarnym, czyli czytanie/zapisanie ciągów bajtów, a nie tekstów - tego tu nie ćwiczymy
# https://docs.python.org/3/library/functions.html#open
with open('nowy_plik.txt', mode='a', encoding='utf-8') as plik2:
    print('To jest dopisane już wewnątrz with.', file=plik2)
    print('To już naprawdę koniec', file=plik2)

# Teraz plik już zostaje zamknięty
print('Gotowe')
