P9

***Operacje na plikach***


**Flagi plików**

'r' - plik tylko do odczytu, jeżeli plik nie istnieje wystąpi błąd
'w' - plik do zapisu, jeżeli nie istnieje to zostanie utworzony, zapisane w nim dane zostaną nadpisane
'a' - plik otwarty do zapisu - dane zostaną dopisane na końcu pliku, jeśli plik nie istnieje, to zostanie utworzony
'r+' - plik otwarty do odczytu i zapisu, jeżeli plik nie istnieje wystąpi błąd
'w+' - plik otwarty do odczytu i zapisu, jeżeli istnieją dane to zostaną nadpisane, jeżeli plik nie istnieje to zostanie utworzony
'a+' - plik otwarty do odczytu i zapisu - dane zostaną dopisane na końcu pliku,jeżeli plik nie istnieje, to zostanie utworzony

**Otwieranie i odczyt pliku**


plik=open('scieżka dostępu do plik.txt', 'flaga')

plik.close()                                    #po zakończeniu należy zamknąć plik.

np.

plik=open('/home/master/Pulpit/plik.txt','r')   #do zmiennej plik przypisujemy fizycznie istniejący plik - tylko do odczytu

print(plik.read())                              #najprostsza forma odczytu pliku - czyta i wyświetla cały plik

print(plik.read(3))                             #wyświetla 3 znaki

UWAGA - metoda read(), jak i readline() zapamiętuje pozycje ostatniego odczytu


*Wypisywanie pliku po linijce*

print(plik.readline())                          #wypisuje linijkę
print(plik.readline(2))                         #odczytuje 2 znaki z bieżącej linii


for linijka in plik:
   print(linijka)                               #uwaga - pojawiają się dwa entery - jeden z pliku tekstowego, drugi generowany z printa.


*odczyt wszystkich linii*

print(plik.readlines())                         #odczytuje wszystkie linijki z pliku


*wczytywanie linijek do listy*

linijki=plik.readlines()                        #zczytuje wszystkie linie do linijki tworząc listę
for linijka in linijki:                         #przechodzi całą listę linii i zapisuje do zmiennej linijka
    print(linijka)


*pozbywanie się białych znaków*

Znaki białe, to te, które nie zawsze są widoczne dla nas, ale występują w tekście - są to spacje, tabulatory, entery.

linijka.strip()                                 #usuwa białe znaki z tekstu (z linijki)


*Podział linijki na wyrazy*

Oddzielne wyrazy wyciągnięte z linii tekstu są dla nas bardziej przydatne niż długi łańcuch. Najłatwiej jest to zrobić poprzez podział linii i przekształcenie jej w listę stringów.

np.
linijka='Krótki napis testowy'
linijka.split()                                  #dzieli linijkę - efekt - ['Krótki','napis','testowy']

Teraz to już można wszystko :)


ZADANIE
Utwórz (ręcznie) plik tekstowy imiona.abc z imionami uczniów twojej grupy (każde imię w nowej linii). Napisz program, który wczyta imiona z pliku i wyświetli je na ekranie posortowane alfabetycznie. 


**Zapis do pliku**


*metoda write()*

Należy pamiętać, że należy otworzyć plik do zapisu oraz najlepiej od razu do odczytu, aby można było sprawdzić, czy dział :)


plik=open('/home/master/Pulpit/zapis.txt','w+')         #otwarcie pliku do zapisu i odczytu

Zapisujemy do pliku  użyciem metody write()
np.
plik.write('Pierwsza linia')
plik.write('Druga linia')
plik.write('Trzecia linia')

lub

napis=input('Wpisz tekst, który chcesz zapisać do pliku\n')
plik.write(napis)


UWAGA
Metoda write nie wstawia znaku końca linii. Należy samodzielnie o to zadbać.
np.
plik.write('\nPierwsza linia\nDruga linia\nTrzecia linia\n')



*Sprawdzenie pozycji kursora w pliku*

tell()

np.
print('Teraz jesteśmy na pozycji',plik.tell())



*Ustawienie kursora na bieżącej pozycji w pliku*

seek()

plik.seek(0)                                #ustawiamy kursor w pozycji 0, czyli na początku pliku (w nawiasie podajemy nr znaku)



*metoda writelines()*

Metoda writelines() pozwala na przepisywanie danych do pliku z listy

np.

listanapisow=['Pierwsza linia\n','Druga linia\n','Trzecia linia\n]
plik.writelines(listanapisow)


INNE

*Sprawdzanie czy plik istnieje na dysku*

import os
if os.path.isfile(plik.txt):
    print(plik.read())

else:
    print('plik nie istnieje')



*Zamiana znaków
 linia = linia.replace("\n", "")  # usuwamy znaki końca linii

*Ustawienie kodowania
 linia = linia.decode("utf-8")  # odczytujemy znaki jako utf-8

ZADANIE
Palindromy