12 Moduły Pakiety zapis

Moduły

Większy program warto podzielić na moduły. W module możemy umieścić pojedynczą klasę lub funkcję, lub wiele klas i funkcji. Kryterium podziału powinna być logika, podobne razem.

tworzymy plik przyklad.py z jedną klasą w module

i importujemy:

1
2
3
import przyklad

from przyklad import Nazwaklasy

ewentualnie:

1
from przyklad import *

Taki sposób importu umożliwia nie odwoływanie się do nazwy moduły przy wywoływaniu metod.


Można nadać importowanemu modułowi

1
import nazwamodulu as naszanazwamodulu

lub klasie naszą własną nazwę którą będziemy wywoływać:

1
from osobaModule import Osoba as Naszaosoba




Pakiety

Kolekcja modułów w katalogu.
Żeby umożliwić import z katalogu, musi zawierać plik __init__.py (może być pusty)

importowanie z poza katalogu:

1
import nazwapakietu.nazwamodulu

lub:

1
from nazwapakietu.nazwamodulu import NazwaKlasy


importowanie z katalogu w którym jest pakiet

1
from .nazwamodulu import NazwaKlasy


i z katalogu wyżej:

1
from ..nazwamodulu import NazwaKlasy



Zapis i odczyt pliku.

zapis tradycyjny:

1
2
3
4
5
6
7
def zapis(self):
        print("zapisuje plik o nazwie: ",self.nazwa,".txt")
        plik=open(str(self.nazwa)+".txt","w")
        try:
            plik.write("tresc zapisu może być zmienna z zawartością")
        finally:
            plik.close()


odczyt tradycyjny (z wrzuceniem w listę i oddzieleniem średnikami)

1
2
3
4
5
6
7
def odczyt(self):
        plik=open(str(self.nazwa)+".txt")
        try:
            tekst=plik.read()
        finally:
            plik.close()
        lista88=tekst.split(";")


odczyt i zapis za pomocą modułu pickle (nie trzeba zamykać i otwierać pliku)

1
2
3
4
5
6
7
8
9
import pickle
x="Dzień Dobry"

with open("plik.bin" , "wb" ) as file :
    pickle.dump(x ,file)
with open("plik.bin" , "rb" ) as file :
    z=pickle.load(file)

print(z)

do pliku plik.bin zapisaliśmy tekst ze zmiennej 'x' następnie do zmiennej 'z' odczytaliśmy z pliku ten tekst