{"id":313,"date":"2020-04-01T07:27:36","date_gmt":"2020-04-01T06:27:36","guid":{"rendered":"https:\/\/stachura-terlecka.pl\/?page_id=313"},"modified":"2020-04-01T07:27:36","modified_gmt":"2020-04-01T06:27:36","slug":"dzialania-na-plikach","status":"publish","type":"page","link":"https:\/\/stachura-terlecka.pl\/?page_id=313","title":{"rendered":"Dzia\u0142ania na plikach"},"content":{"rendered":"<h4> Do przygotowania przed zaj\u0119ciami<\/h4>\n<p>* Python dla ka\u017cdego. Podstawy programowania. &#8211; Michael Dawson &#8211; Helion **R** &#8211; Rozdzia\u0142 8. Wprowadzenie. Koniec gry.<\/p>\n<h4> Cel i tematyka zaj\u0119\u0107<\/h4>\n<p>Dzisiejsze laboratorium ma na celu zapoznanie Pa\u0144stwa z nast\u0119puj\u0105cymi zagadnieniami:<br \/>\n* odczyt z pliku,<br \/>\n* zapis do pliku,<br \/>\n* zapis do pliku z\u0142o\u017conych struktur danych.<\/p>\n<h3> &#8211; Zadanie przypominaj\u0105ce<\/h3>\n<p>* Napisz funkcj\u0119, kt\u00f3ra jako argument przyjmuje liczb\u0119 i zwraca 1 je\u015bli liczba jest podzielna przez 3 i przez 5<\/p>\n<h4> Dzia\u0142ania na plikach<\/h4>\n<h4> Odczyt z pliku<\/h4>\n<p>Poni\u017cszy kod realizuje odczytanie z pliku i formacji.<br \/>\n<code python=\"\"><br \/>\n# Odczytaj to<br \/>\n# Demonstruje odczytywanie danych z pliku tekstowego<\/code><\/p>\n<p><code python=\"\">print(\"Otwarcie i zamkni\u0119cie pliku.\")<br \/>\ntext_file = open(\"odczytaj_to.txt\", \"r\")<br \/>\ntext_file.close()<\/code><\/p>\n<p><code python=\"\"><br \/>\n<\/code><code python=\"\"><\/code><code python=\"\">print(\"\\nOdczytywanie znak\u00f3w z pliku.\")<br \/>\ntext_file = open(\"odczytaj_to.txt\", \"r\")<br \/>\nprint(text_file.read(1))<br \/>\nprint(text_file.read(7))<br \/>\ntext_file.close()<br \/>\n<\/code><\/p>\n<h4> Wczytywanie pliku do listy<\/h4>\n<p>Plik mo\u017cemy wczyta\u0107 do listy w nast\u0119puj\u0105cy spos\u00f3b:<br \/>\n<code python=\"\"><br \/>\nprint(\"\\nWczytanie ca\u0142ego pliku do listy.\")<br \/>\ntext_file = open(\"odczytaj_to.txt\", \"r\")<br \/>\nlines = text_file.readlines()<br \/>\nprint(lines)<br \/>\nprint(len(lines))<br \/>\nfor line in lines:<br \/>\nprint(line)<br \/>\ntext_file.close()<br \/>\n<\/code><\/p>\n<h4> Zapis do pliku<\/h4>\n<p>Poni\u017cszy kod realizuje zapis do pliku:<br \/>\n<code python=\"\"><br \/>\nprint(\"Utworzenie pliku tekstowego za pomoc\u0105 metody write().\")<br \/>\ntext_file = open(\"zapisz_to.txt\", \"w\")<br \/>\ntext_file.write(\"Wiersz 1\\n\")<br \/>\ntext_file.write(\"To jest wiersz 2\\n\")<br \/>\ntext_file.write(\"Ten tekst tworzy wiersz 3\\n\")<br \/>\ntext_file.close()<br \/>\n<\/code><\/p>\n<h4> Zapisywanie list do pliku<\/h4>\n<p>Do pliku mo\u017cemy zapisywa\u0107 nie tylko \u0142a\u0144cuchy znak\u00f3w, ale i listy. Mo\u017cna to realizowa\u0107 w spos\u00f3b nast\u0119puj\u0105cy:<br \/>\n<code python=\"\"><br \/>\nprint(\"\\nUtworzenie pliku tekstowego za pomoc\u0105 metody writelines().\")<br \/>\ntext_file = open(\"zapisz_to.txt\", \"w\")<br \/>\nlines = [\"Wiersz 1\\n\",<br \/>\n\"To jest wiersz 2\\n\",<br \/>\n\"Ten tekst tworzy wiersz 3\\n\"]<br \/>\ntext_file.writelines(lines)<br \/>\ntext_file.close()<br \/>\n<\/code><\/p>\n<h4> Zapisywanie struktur do pliku binarnego<\/h4>\n<p>Dzia\u0142anie na plikach tekstowych jest bardzo wygodne. Nie ma problemu z edytorami kt\u00f3rymi mo\u017cemy je edytowa\u0107, jednak minusem wykorzystywania zwyk\u0142ych plik\u00f3w tekstowych jest to, \u017ce mo\u017cemy zapisywa\u0107 jedynie \u0142a\u0144cuchy znak\u00f3w. Gdy za\u015b chcemy przechowywa\u0107 bardziej z\u0142o\u017cone struktury w plikach stosujemy pliki binarne. Operacja przechowywana danych w pliku binarnym to konserwowanie i realizujemy j\u0105 w nast\u0119puj\u0105cy spos\u00f3b:<br \/>\n<code python=\"\"><br \/>\nimport pickle, shelve<\/code><\/p>\n<p><code python=\"\"><br \/>\n<\/code><code python=\"\">print(\"Konserwowanie list.\")<br \/>\nvariety = [\"\u0142agodny\", \"pikantny\", \"kwaszony\"]<br \/>\nshape = [\"ca\u0142y\", \"krojony wzd\u0142u\u017c\", \"w plasterkach\"]<br \/>\nbrand = [\"Dawtona\", \"Klimex\", \"Vortumnus\"]<br \/>\nf = open(\"pikle1.dat\", \"wb\")<br \/>\npickle.dump(variety, f)<br \/>\npickle.dump(shape, f)<br \/>\npickle.dump(brand, f)<br \/>\nf.close()<br \/>\n<\/code><\/p>\n<h4> Korzystanie z zakonserwowanych danych<\/h4>\n<p>Aby skorzysta\u0107 z danych umieszczonych w pliku binarnym nale\u017cy zastosowa\u0107 nast\u0119puj\u0105cy kod:<br \/>\n<code python=\"\"><br \/>\nimport pickle, shelve<\/code><\/p>\n<p><code python=\"\"><br \/>\n<\/code><code python=\"\">print(\"\\n Korzystanie z zakonserwowanych danych.\")<br \/>\nf = open(\"pikle1.dat\", \"rb\")<br \/>\nvariety = pickle.load(f)<br \/>\nshape = pickle.load(f)<br \/>\nbrand = pickle.load(f)<br \/>\nprint(variety)<br \/>\nprint(shape)<br \/>\nprint(brand)<br \/>\nf.close()<br \/>\n<\/code><\/p>\n<p>Kolejnym sposobem przechowywania list i innych struktur tzw. odk\u0142adanie ich na p\u00f3\u0142k\u0119. Dzia\u0142anie takie realizujemy w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><code python=\"\"><br \/>\nimport pickle, shelve<\/code><\/p>\n<p><code python=\"\">print(\"\\nOdk\u0142adanie list na p\u00f3\u0142k\u0119.\")<br \/>\ns = shelve.open(\"pikle2.dat\")<br \/>\ns[\"odmiana\"] = [\"\u0142agodny\", \"pikantny\", \"kwaszony\"]<br \/>\ns[\"kszta\u0142t\"] = [\"ca\u0142y\", \"krojony wzd\u0142u\u017c\", \"w plasterkach\"]<br \/>\ns[\"marka\"] = [\"Dawtona\", \"Klimex\", \"Vortumnus\"]<br \/>\ns.sync()    # upewnij si\u0119, \u017ce dane zosta\u0142y zapisane<\/code><\/p>\n<p><code python=\"\"><br \/>\n<\/code><code python=\"\"><\/code><code python=\"\">print(\"\\nPobieranie list z pliku p\u00f3\u0142ki:\")<br \/>\nprint(\"marka -\", s[\"marka\"])<br \/>\nprint(\"kszta\u0142t -\", s[\"kszta\u0142t\"])<br \/>\nprint(\"odmiana -\", s[\"odmiana\"])<br \/>\ns.close()<br \/>\n<\/code><\/p>\n<h3> Sprawdzanie czy plik istnieje<\/h3>\n<p>Aby sprawdzi\u0107 czy plik istnieje nale\u017cy skorzysta\u0107 z modu\u0142u os.<br \/>\n<code python=\"\"><br \/>\nimport os<\/code><\/p>\n<p><code python=\"\"><br \/>\n<\/code><code python=\"\">uprawnienia = 1<br \/>\nlocation_name = \"las\"<br \/>\nsciezkaDoPliku= location_name +\".txt\"<br \/>\nif os.path.isfile(sciezkaDoPliku) :<br \/>\nprint(\"Tak\")<br \/>\nelse :<br \/>\nif uprawnienia == 1:<br \/>\nanswer = input(\"Czy chcesz utworzy\u0107 ten plik?\")<br \/>\nif answer.lower() == \"tak\":<br \/>\nprint(\"Tworz\u0119 plik tej lokacji.\")<br \/>\ntext_file = open(sciezkaDoPliku, \"w\")<br \/>\nlines = []<br \/>\ntext_location = input(\"Podaj opis lokacji. Je\u015bli chcesz prze\u015b\u0107 do nowej linii to u\u017cyj \u015brednika: \")<br \/>\nlines = text_location.split(\";\")<br \/>\nlines = list(lines)<br \/>\nelse:<br \/>\nprint(\"No to nie\")<br \/>\nelse:<br \/>\nprint(\"Przykro mi plik nie istnieje\")<br \/>\n<\/code><\/p>\n<h3> Zadania do samodzielnego wykonania na laboratoriach<\/h3>\n<p>* Napisz funkcj\u0119, kt\u00f3rej zadaniem b\u0119dzie wy\u015bwietla\u0107 opis lokacji z Pa\u0144stwa gry, kt\u00f3ra jest zapisana w pliku tekstowym. Prosz\u0119 jako nazw\u0119 pliku poda\u0107 nazw\u0119 lokacji bez spacji i polskich znak\u00f3w. (Lokacj\u0105 jak ju\u017c omawiali\u015bmy na laboratoriach wprowadzaj\u0105cych projekt mo\u017ce by\u0107 np. las, karczma, itp.)<br \/>\n* Prosz\u0119 zmodyfikowa\u0107 funkcj\u0119 tworzenia postaci tak aby po zako\u0144czeniu tworzenia postaci struktura do kt\u00f3rej zapisywane s\u0105 dane by\u0142a konserwowana do pliku o nazwie nazwa_postaci.dat<br \/>\n* Napisz funkcj\u0119, kt\u00f3ra realizuje zachowanie stanu gry w czasie jej trwania. Trzyma nast\u0119puj\u0105ce informacje &#8211; nazwa gracza, poziom, nazwa lokacji, numery rozwi\u0105zanych zada\u0144. Podpowied\u017a skorzystaj z funkcji **shelve**<\/p>\n<h3> &#8211; Przyk\u0142ady u\u017cywane na laboratoriach<\/h3>\n<p>Przyk\u0142ady pochodz\u0105 z ksi\u0105\u017cki<br \/>\n* Podstawow\u0105 ksi\u0105\u017ck\u0105 wykorzystywan\u0105 na laboratorium b\u0119dzie: \u201ePython dla ka\u017cdego. Podstawy programowania Wydanie III\u201d, autor Michael Dawson, Wydawnictwo Helion **(R)**<\/p>\n<h4> Zadanie domowe<\/h4>\n<p>**Wszystkie zadania domowe nale\u017cy archiwizowa\u0107 poniewa\u017c w dalszej cz\u0119\u015bci laboratori\u00f3w b\u0119dziecie je Pa\u0144stwo rozbudowywa\u0107**<br \/>\n* Funkcj\u0119 tworzenia postaci, kt\u00f3r\u0105 zrealizowali\u015bcie Pa\u0144stwo na zaj\u0119ciach zmodyfikuj tak aby wykorzystywa\u0142a program z zadania domowego nr 2 w laboratorium nr 4 Listy s\u0142owniki&#8230;..<br \/>\n* Zrealizuj zapis stanu gry (napisz odpowiedni\u0105 funkcj\u0119). Zapis stany gry ma zawiera\u0107: nazwa gracza, poziom, nazwa lokacji, numery rozwi\u0105zanych zada\u0144. Stw\u00f3rz funkcj\u0119 wczytuj\u0105c\u0105 stan gry.<br \/>\n* Python dla ka\u017cdego. Podstawy programowania. &#8211; Michael Dawson &#8211; Helion **R** &#8211; Rozdzia\u0142 8.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Do przygotowania przed zaj\u0119ciami * Python dla ka\u017cdego. Podstawy programowania. &#8211; Michael Dawson &#8211; Helion **R** &#8211; Rozdzia\u0142 8. Wprowadzenie. Koniec gry. Cel i tematyka zaj\u0119\u0107 Dzisiejsze laboratorium ma na celu zapoznanie Pa\u0144stwa z nast\u0119puj\u0105cymi zagadnieniami: * odczyt z pliku, * zapis do pliku, * zapis do pliku z\u0142o\u017conych struktur danych. &#8211; Zadanie przypominaj\u0105ce * [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/pages\/313"}],"collection":[{"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=313"}],"version-history":[{"count":3,"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/pages\/313\/revisions"}],"predecessor-version":[{"id":332,"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/pages\/313\/revisions\/332"}],"wp:attachment":[{"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}