{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "kl_python_alapok2.ipynb", "provenance": [], "collapsed_sections": [], "include_colab_link": true }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "abD6WbtCMj0b", "colab_type": "text" }, "source": [ "

\n", " \n", " \n", "

\n", "\n", "\n", "

\n", "\n", "\n", "\n", "# Python alapok 2\n", "\n", "\n", "\n", "\n", "---\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "TMqP2t2cJGzU" }, "source": [ "\n", "## Függvény készítése, definiálás\n", "\n", "A függvény névvel ellátott alprogram, amely a program más részeiből meghívható. \n", "\n", "\n", "Függvények használatával a számítási feladatok kisebb egységekre oszthatók. \n", "\n", "A gyakran használt függvények kódjátkönyvtárakbarendezhetjük. \n", "\n", "A matematikában egy függvénynek nincsenek mellék hatásai. Egy Python nyelvű függvénynek lehetnek! \n", "\n", "\n", "#### Pythonban a függvények: \n", "\n", " - Egy változónak értékül adhatunk egy függvényt. \n", " - Függvényeket lehet egymásba ágyazni. \n", " - Egy függvény kaphat paraméterként függvényt ill. adhat eredményül függvényt.\n", " \n", "\n", "\n", "#### Struktúrálás és behúzás\n", "\n", "Egy Python program struktúráját a behúzások definiálják. \n", "\n", "Egy kódblokk elejét egy „:” definiál, az  első sort fejlécnek tekinthetjük (teszt, ciklus, definíció, stb.). \n", "\n", "A fejléchez képpest a kódblokk teste  beljebb van igazítva (de azonos mértékben). \n", "\n", "A kódblokk ott ér véget, ahol az utasítássor behúzása a  fejléc behúzásával megegyezik. \n", "(Ez utóbbi utasítássor már nem tartozik az előző kódblokkhoz.) A  kódblokkok egymásba ágyazhatók.\n", "\n", "Kisméretű, pl. egy utasításból álló blokk esetében a blokkot egyetlen sorban definiálhatjuk. \n", "\n", "A ':'  karakter mindig a blokk fejlécének a blokk testétől való elhatárolására szolgál. \n", "\n", "A blokk testében  lévő utasításokat ';' választja el egymástól.\n", "\n", "Azonban ez a használatmód nem mindig előnyös amikor  a kód olvashatóságáról van szó, ezért kerülendő.\n", "\n", "\n", "---\n" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "fQ9IATAnIsuB", "outputId": "72ccf77d-ab00-4d25-d2ec-679029a1c6f6", "colab": { "base_uri": "https://localhost:8080/", "height": 34 } }, "source": [ "#Föggvény készítése deffiniálása\n", "def fug01(x):\n", " y = 0\n", " while(y < x):\n", " y = y + 1\n", " print('Még egy növelés! most :', y )\n", " return('Kész vagyok')\n", " \n", "## föggvény meghívása\n", "fug01(0) ## -> 'Kész vagyok'\n" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "'Kész vagyok'" ] }, "metadata": { "tags": [] }, "execution_count": 8 } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "q_unjpWORAzP" }, "source": [ "\n", "## Függvény meghívása, használata\n" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "4X1T3JcoIsuP", "outputId": "a7f0ee91-42e5-4fb5-8484-77ad36ec9e07", "colab": { "base_uri": "https://localhost:8080/", "height": 87 } }, "source": [ "## Föggvény meghívása\n", "print(fug01(3)) ## -# Még egy növelés! most : 1 / Még egy növelés! most : 2 / Még egy növelés! most : 3 / Kész vagyok" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Még egy növelés! most : 1\n", "Még egy növelés! most : 2\n", "Még egy növelés! most : 3\n", "Kész vagyok\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "-OqV45XIMj0o", "colab_type": "code", "colab": {}, "outputId": "b4606f68-ce59-4fc5-ca63-62006708f8a7" }, "source": [ "from math import * # eleg lenne az sqrt is \n", "def kerulet(a,b,c): \n", " return a+b+c\n", "\n", "def terulet(a,b,c): \n", " s = kerulet(a,b,c)/2 \n", " return sqrt(s*(s-a)*(s-b)*(s-c))\n", "\n", "x = float( input(\"a: \")) ## x adat bekérés\n", "y = float( input(\"b: \")) ## y adat bekérés\n", "z = float( input(\"c: \")) ## z adat bekérés\n", "\n", "print (\"Kerület: \",round(kerulet(x,y,z),2) )\n", "print (\"Terület: \",round(terulet(x,y,z),2) )\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "a: 2\n", "b: 3\n", "c: 4\n", "Kerület: 9.0\n", "Terület: 2.9\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "1AzYsz7BMj0r", "colab_type": "text" }, "source": [ "\n", "---\n", "\n", "\n", "## A funkcionális programozás \n", "\n", " - lambda kifejezés: egysoros, névtelen függvény.\n", "\n", " - map: függvény alkalmazása egy szekvencia elemeire.\n", "\n", " - filter: sz ˝ur˝ofeltétel alkalmazása egy szekvenciára.\n", " \n" ] }, { "cell_type": "code", "metadata": { "id": "Sgd9NwWrMj0s", "colab_type": "code", "colab": {}, "outputId": "f024d378-725f-45eb-e767-25afa1f59b50" }, "source": [ "# Példa lambda kifejezésre.\n", "f = lambda x: x**2 ## definicio\n", "print(f(3))\n", "\n", "print('---------1---------')\n", "# Egynél több bemenet is megengedett.\n", "g = lambda x, y: x + y\n", "print(g(2, 3))\n", "\n", "print('---------2---------')\n", "# ...de akár nulla bemenet is lehet.\n", "h = lambda: 42\n", "print(h())\n", "\n", "print('---------3---------')\n", "# Rendezzük párok listáját a második elem szerint lambda kifejezés nélkül.\n", "l = [(20, 'körte'), (30, 'szilva'), (40, 'alma')]\n", "def key_function(x):\n", " return x[1]\n", "print(sorted(l, key=key_function))\n", "\n", "print('---------4---------')\n", "# A feladat megoldása lambda kifejezéssel\n", "l = [(20, 'körte'), (30, 'szilva'), (40, 'alma')]\n", "print(sorted(l, key=lambda x: x[1]))\n", "\n", "\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "9\n", "---------1---------\n", "5\n", "---------2---------\n", "42\n", "---------3---------\n", "[(40, 'alma'), (20, 'körte'), (30, 'szilva')]\n", "---------4---------\n", "[(40, 'alma'), (20, 'körte'), (30, 'szilva')]\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "D2TYYkAsMj0v", "colab_type": "code", "colab": {}, "outputId": "cbb71a93-d937-47e2-dc28-0a3ada5a4ef2" }, "source": [ "### ------ Példa a map függvény alkalmazására:\n", "\n", "# Hány elem van összesen az alábbi összetett adatszerkezetben?\n", "data = [{1, 2}, {3}, {4, 5, 6}]\n", "\n", "# Megoldás map-pel:\n", "print(sum(map(len, data)))\n", "\n", "# Ugyanez lista comprehension-nel:\n", "print(sum([len(x) for x in data]))\n", "\n", "\n", "\n", "\n", "### ------ Példa a filter függvény alkalmazására:\n", "\n", "# Válasszuk ki a páros számokat az alábbi listából, és adjuk vissza az eredményt tuple-ként!\n", "data = [2, 3, 5, 6, 7, 8]\n", "\n", "# Megoldás filter-rel:\n", "print(tuple(filter(lambda x: x % 2 == 0, data)))\n", "\n", "# Ugyanez lista comprehension-nel:\n", "print(tuple([x for x in data if x % 2 == 0]))" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "6\n", "6\n", "(2, 6, 8)\n", "(2, 6, 8)\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "smMRoReuL--I" }, "source": [ "\n", "---\n", "\n", "## Objektumorientált programozás\n", "\n", "\n", "Az objektumorientált programozás (OOP) olyan programozási módszertan, ahol az egymással kapcsolatban álló programegységek hierarchiájának megtervezése áll a középpontban. \n", "\n", "A korábban uralkodó procedurális megközelítés a műveletek megalkotására fókuszált. \n", "\n", "OOP esetén az adatokat és az őket kezelő függvényeket egységbe zárjuk (encapsulation). \n", "\n", "Az OOP másik fontos sajátossága az öröklődés (inheritance).\n", "\n", "\n", "### Osztály létehozása és példányosítása\n", "\n", "\n", "#### Az Objektum tartalmaz\n", " - objnev.metodusev() -> lehet metodusa (belső függvényei)\n", " - objnev.adattag -> adata (belsőleg tárolt értékei)\n", " \n", " \n", " A self név nem speciális! (Csak szokás. Tartsuk meg.) \n", " \n", " A self magát a saját objektumunkat jelenti, amit automatikusan átadunk a py interpreternek. Viszont fogadni nekünk kell. \n", "\n", "\n", "\n", "### Öröklés és működése\n", "\n" ] }, { "cell_type": "code", "metadata": { "id": "n-Jtbv3yMj00", "colab_type": "code", "colab": {}, "outputId": "db35365c-6a00-441d-a6b1-a5fcdc472637" }, "source": [ "# Osztály definició\n", "class Osztalyom: \n", " \"Egy egyszeru pelda osztaly\" \n", " i = 12345 \n", " \n", " def f(self): \n", " return 'hello vilag'\n", "\n", "# Osztály használata\n", " \n", "## Példányosítás nélkül is lehet az elemeire hivatkozni \n", "print ('Példányosítás nélkül ', Osztalyom.i) \n", "print ('Példányosítás nélkül ', Osztalyom.f(''))\n", "\n", "print('-------------------------------')\n", "\n", "## Példányosítás után, használat:\n", "o = Osztalyom() \n", "print ('Példányosítás után: ', o.i)\n", "print ('Példányosítás után: ',o.f())" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Példányosítás nélkül 12345\n", "Példányosítás nélkül hello vilag\n", "-------------------------------\n", "Példányosítás után: 12345\n", "Példányosítás után: hello vilag\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "miL1Z1nWMj03", "colab_type": "code", "colab": {}, "outputId": "1d000d4f-b427-424d-c537-1f52332cd461" }, "source": [ " # Példa: téglalap osztály. \n", "class Rectangle: \n", " def __init__(self, a, b): # konstruktor \n", " self.a = a \n", " self.b = b\n", " def area(self): # területszámító metódus \n", " return self.a * self.b\n", " def perimeter(self): # kerületszámító metódus \n", " return (self.a + self.b) * 2\n", " \n", "# 2 téglalap objektum létrehozása \n", "r1 = Rectangle(10, 20) \n", "r2 = Rectangle(15, 15) \n", "\n", "print(r1) \n", "print(r2)\n", "\n", "# területek kiírása \n", "print(r1.area()) \n", "print(r2.area())\n", "\n", "# ugyanez hosszabban \n", "print(Rectangle.area(r1)) \n", "print(Rectangle.area(r2))\n", "\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "<__main__.Rectangle object at 0x000001C0A795AAC8>\n", "<__main__.Rectangle object at 0x000001C0A795AB08>\n", "200\n", "225\n", "200\n", "225\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "oI1krAjOMj06", "colab_type": "code", "colab": {}, "outputId": "1fdbf3a2-137d-464d-b0d0-99d9b668874f" }, "source": [ "import math\n", "# Példa: kör osztály. \n", "class Circle: \n", " def __init__(self, r): \n", " self.r = r\n", " \n", " def area(self): \n", " return self.r**2 * math.pi\n", " \n", " def perimeter(self): \n", " return 2 * self.r * math.pi\n", " \n", "# 2 kör objektum létrehozása \n", "c1 = Circle(5) \n", "c2 = Circle(10)\n", "\n", "# területek kiírása \n", "print(c1.area()) \n", "print(c2.area())\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "78.53981633974483\n", "314.1592653589793\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "pyYe2U9jMj09", "colab_type": "code", "colab": {}, "outputId": "230099bb-0feb-49d8-b269-a6d6a7bee4b4" }, "source": [ "# A kerület-terület arány kiszámítása ugyanúgy történik a 2 esetben. \n", "# Hozzunk létre egy egy síkidom ősosztályt, származtassuk ebből a kört és a \n", "# téglalapot, és helyezzük át a kerület-terület arány számítást az ősosztályba!\n", "class Shape: \n", " \n", " def area(self):\n", " raise NotImplementedError()\n", " \n", " def perimeter(self): \n", " raise NotImplementedError()\n", " \n", " def pa_ratio(self): \n", " return self.perimeter() / self.area()\n", " \n", " \n", "class Rectangle(Shape): # <= A Rectangle a Shape leszármazottja. \n", " \n", " def __init__(self, a, b): \n", " self.a = a \n", " self.b = b\n", " \n", " def area(self): \n", " return self.a * self.b\n", " \n", " def perimeter(self): \n", " return (self.a + self.b) * 2\n", " \n", " \n", "class Circle(Shape): # <= A Circle is a Shape leszármazottja. \n", " \n", " def __init__(self, r): \n", " self.r = r\n", " \n", " def area(self): \n", " return self.r**2 * math.pi\n", " \n", " def perimeter(self): \n", " return 2 * self.r * math.pi\n", " \n", "r1 = Rectangle(10, 20) \n", "r2 = Rectangle(15, 25) \n", "\n", "c1 = Circle(5) \n", "c2 = Circle(10)\n", "\n", "print(r1.pa_ratio()) \n", "print(c2.pa_ratio())\n", "\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "0.3\n", "0.19999999999999998\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "jXGoTNSvIsuk", "outputId": "a1beafea-da9a-4a0e-941a-0f2441d03f90", "colab": { "base_uri": "https://localhost:8080/", "height": 87 } }, "source": [ "## Osztály deffinició\n", "class Cicus: \n", " def __init__(self, name, color, age, speed):\n", " self.name = name\n", " self.color = color\n", " self.age = age\n", " self.speed = speed\n", " \n", "# osztály metodos létre hozása \n", " def nyavogj(self):\n", " print(\"Miauuu\")\n", "\n", "\n", "# példány létrehozása osztályból \n", "cicus1 = Cicus(\"Cirmi\", \"szürke\", 2, \"gyors\")\n", "\n", "# példány tulajdonság megjelenítése\n", "print(cicus1.name)\n", "print(cicus1.age)\n", "# osztály metodus meghívása \n", "cicus1.nyavogj()\n", "\n", "# Öröklés és metodussal bővítése\n", "class fo_maccsek(Cicus):\n", " def jellemzo(self):\n", " print(\"Én vagyok a király\")\n", " \n", "# bővített osztály alapján példányosítás \n", "kedvenc = fo_maccsek(\"Kedvenc\", \"kormi\", 5, \"lassú\")\n", "\n", "# bővitett metodus használata\n", "kedvenc.jellemzo()\n", "\n", "# cicus.jellemzo() ## -> ez hibát üzennek mivel a szülőnél még nem volt deffiniálva ez a metodus\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Cirmi\n", "2\n", "Miauuu\n", "Én vagyok a király\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "LrkQ1EMwMj1C", "colab_type": "text" }, "source": [ "\n", "---\n", "\n", "\n", "### Speciális („dunder”) attribútumok és metódusok (mert minden objektum)\n", "\n", " - __doc__, __class__, __init__(), __hash__(), __code__, ... \n", " \n", " - attribútumtárolásra: __dict__, __dir__() \n", " \n", " - kiírásra: __repr__(), __str__() \n", " \n", " - műveletvégzésre: __add__(), __mul__(), ... \n", " \n", " - indexelésre: __getitem__(), __setitem__(), __len__() \n", " \n", " - iterálásra: __iter__(), __next__() \n", " \n", " - kontextuskezelésre: __enter__(), __exit__() \n", " \n", " ---\n", " \n", " \n", " " ] }, { "cell_type": "markdown", "metadata": { "id": "kZ_yMY_fMj1D", "colab_type": "text" }, "source": [ "\n", "\n", "#### A string objektum metodusai\n", "\n" ] }, { "cell_type": "code", "metadata": { "id": "fNEhvyb1Mj1D", "colab_type": "code", "colab": {}, "outputId": "b4fb8e72-2546-4466-d75b-eed2b9ca6287" }, "source": [ "\n", "print('betonház'.replace('b','p').replace('e','i')) ## 'pitonház' \n", "print('betonház'.find('t')) ## 2 \n", "print('betonház'.split('t')) ## ['be', 'onház'] \n", "print(list('betonház') ) ## ['b', 'e', 't', 'o', 'n','h', 'á', 'z'] \n", "print('x'.join(['b', 'e', 't', 'o', 'n','h', 'á', 'z'])) ##' 'bxextxoxnxhxáxz'" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "pitonház\n", "2\n", "['be', 'onház']\n", "['b', 'e', 't', 'o', 'n', 'h', 'á', 'z']\n", "bxextxoxnxhxáxz\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "TtbrZpnvR2Yr" }, "source": [ "\n", "---\n", "\n", "\n", "## Reguláris kifejezések használata\n", "\n", "\n", "### keresés, szűrés\n" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "4DluEKpHSCgA", "outputId": "ca066e50-fe62-4e64-9f9c-fd608814cf5f", "colab": { "base_uri": "https://localhost:8080/", "height": 87 } }, "source": [ "# modul metöltése\n", "import re\n", "szoveg = \"Keresd meg, hogy a Lajos szó szerepel ebben a szövegben vagy sem, persze a lajos szot ne vedd figyelembe. Na csöggedj el megoldható ez is. ha mégsem megy mierdekel@mail.com címre irj.\"\n", "\n", "# Minta keresés normál\n", "van = re.search('lajos', szoveg)\n", "if van :\n", " print(van.span()) ## találat poziciója\n", "else :\n", " print('Nem található')\n", "\n", "#összes a betüt\n", "osszes = re.findall('a', szoveg, re.IGNORECASE)\n", " \n", "if osszes :\n", " print(osszes) ## találat poziciója\n", " \n", "# nagybetűvel kazdődő szavakat \n", "nagybetus = re.findall('[A-Z][a-z]*', szoveg) \n", "\n", "if nagybetus :\n", " print(nagybetus)\n", " \n", "email = re.findall(\"[\\w\\.-]+@[\\w\\.-]+\", szoveg, re.IGNORECASE) \n", "\n", "if email :\n", " print(email)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "(75, 80)\n", "['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']\n", "['Keresd', 'Lajos', 'Na']\n", "['mierdekel@mail.com']\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "tZ8GaveNXzPg" }, "source": [ "\n", "---\n", "\n", "\n", "\n", "## File műveletek\n", "\n", "\n", "### File olvasás, írás\n", "\n" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "hy4h1qwgX9oe", "outputId": "2b078f9b-ddbf-4b95-e8f9-e250250f8f8f", "colab": { "base_uri": "https://localhost:8080/", "height": 123 } }, "source": [ "# odul betöltés\n", "import os\n", "\n", "# aktuális munka könyvtár lekérdezése\n", "os.getcwd() ## -> /content' (colab-on)\n", "\n", "#-------------------------\n", "\n", "# írásra megnyítás (tartalom bekülírás módban)\n", "file1 = open(\"minta_file1.txt\", \"w\")\n", "\n", "# file tartalmáb írás\n", "file1.write(\"Új sor besüzása a minta_file1.txt filebe\")\n", "\n", "# Beírás\n", "file1.flush()\n", "\n", "# File bezárása\n", "file1.close\n", "\n", "#-------------------------\n", "\n", "# Lezárt File megnyítása olvasásra\n", "file1 = open(\"minta_file1.txt\", \"r\")\n", "\n", "# file tartalmának egy szerű kiolvasása és változóba helyeztése\n", "text1 = file1.read()\n", "\n", "# tartalom kiírása\n", "print(text1)\n", "\n", "# szöveg hossz kiírása\n", "print(len(text1))\n", "\n", "# File lezárása\n", "file1.close()\n", "\n", "#-------------------------\n", "\n", "# file megnyítása tartalom bővítésre (append mód) 1.\n", "file1 = open(\"minta_file1.txt\", \"a\")\n", "file1.write(\"\\n Ez eg újabb sor beszürását készíti első két spec karakter az újsort hozza létre \\n ez is új sorba kerül. \")\n", "file1.close()\n", "\n", "# file megnyítása tartalom bővítésre (append mód) 2. !! nem kell a file.close\n", "with open(\"minta_file1.txt\", \"a\") as file:\n", " file.write(\"\\n ez is új sorba kerül a szöveg végére füzve\")\n", "\n", "#------------------------- elelnőrés, kiolvasás és megjelenítés\n", "file1 = open(\"minta_file1.txt\", \"r\")\n", "text3 = file1.read()\n", "print(text3) \n", "\n", "\n", "# soronkéntik iírás\n", "for line in file1:\n", " print(line, end = \"\")\n", "\n", " \n", " \n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Új sor besüzása a minta_file1.txt filebe\n", "40\n", "Új sor besüzása a minta_file1.txt filebe\n", " Ez eg újabb sor beszürását készíti első két spec karakter az újsort hozza létre \n", " ez is új sorba kerül. \n", " ez is új sorba kerül a szöveg végére füzve\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "CzvJmRpbdGVc" }, "source": [ "\n", "---\n", "\n", "\n", "\n", "# komplex szöveg elemzés\n", "\n", "\n" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "OIobD-D8dKc-", "outputId": "0811068c-080e-420f-8bc2-567d032102d3", "colab": { "base_uri": "https://localhost:8080/", "height": 107 } }, "source": [ "# Modul betöltése\n", "import string\n", "\n", "\n", "def cleanword(word):\n", " \"\"\"\n", " # szöveg tisztítás különleges karaketrektől\n", " #használat\n", " >>> cleanword('?!Zavaros szoveg!?')\n", " 'Zavaros szoveg'\n", " \"\"\"\n", " word = word.lstrip('\\'\"?!,;:.+-_=@#$%&*()[]{}/\\\\<>\\n~`')\n", " return word.rstrip('\\'\"?!,;:.+-_=@#$%&*()[]{}/\\\\<>\\n~`')\n", "\n", " \n", "def has_dashdash(s):\n", " \"\"\"\n", " # a szövegben kettős kötöjel jelenlétének jelzése\n", " >>> has_dashdash('Vigyázz--vagy mégsem')\n", " True\n", " \"\"\"\n", " return '--' in s\n", "\n", "\n", "def extract_words(s):\n", " \"\"\"\n", " # szöveg kivonatoló, szavakká bontás space mentés\n", " >>> extract_words('Egyszer volt hol nam volt.')\n", " ['Egyszer', 'volt', 'hol', 'nem', 'volt']\n", " \"\"\"\n", " s = s.replace('--', ' ')\n", " words = s.split()\n", " for i, word in enumerate(words):\n", " words[i] = cleanword(word).lower()\n", " return words\n", " \n", "\n", "def wordcount(word, wordlist):\n", " \"\"\"\n", " # szó előforduló és pozició számoló\n", " >>> wordcount('volt', ['Egyszer', 'volt', 'hol', 'nem', 'volt'])\n", " ['volt', 2, [1, 4]]\n", " \"\"\"\n", " return [word, wordlist.count(word), [i for i,x in enumerate(wordlist) if x == word]]\n", " \n", "\n", "def wordset(wordlist):\n", " \"\"\"\n", " >>> wordset(['Egyszer', 'volt', 'hol', 'nem', 'volt'])\n", " ['Egyszer', 'hol', 'nem', 'volt']\n", " \"\"\"\n", " newlist = wordlist[:]\n", " newlist.sort()\n", " uniquewords = []\n", " for word in newlist:\n", " if word not in uniquewords:\n", " uniquewords.append(word)\n", " return uniquewords\n", "\n", "#--------------------------\n", "# Szövegelemzési minta\n", " \n", "# elemzendő forrás file betöltése változóba olvasás\n", "infile = open('/content/alice_in_wonderland.txt', 'r')\n", "text = infile.read()\n", "infile.close()\n", "\n", "\n", "# elemző függvények meghívása\n", "wordlist = extract_words(text)\n", "words = wordset(wordlist)\n", "wordcounts = []\n", "for word in words:\n", " wordcounts.append(wordcount(word, wordlist))\n", " \n", " \n", "# elemzés eredményének kírása \n", "outfile = open('/content/alice_in_wonderland_elemzes.txt', 'w')\n", "outfile.write(\"%-18s%s\\n\" % (\"Word\", \"Count\"))\n", "outfile.write(\"=======================\\n\")\n", "\n", "\n", "for word in wordcounts:\n", " if word[0] and word[0][0] in string.ascii_letters:\n", " outfile.write(\"%-18s %d -> %30s \\n\" % (word[0], word[1], word[2]))\n", " \n", " # yes és no találat kiírásaa képernyőre is szó, találat száma, pozició tömb a szövegben előfordulás karakterhelyei\n", " if word[0] == 'yes' or word[0] == 'no' : \n", " print(\"%-18s %d -> %30s \\n\" % (word[0], word[1], word[2]))\n", " \n", "\n", "# állomány lezárása\n", "outfile.close()\n", "\n", "\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "no 90 -> [57, 605, 640, 698, 771, 836, 1070, 1389, 1490, 1897, 1983, 2930, 3076, 3089, 3106, 3655, 3777, 4462, 4913, 4990, 5164, 5512, 5539, 6500, 6730, 6755, 6768, 6781, 6900, 6968, 7069, 7299, 7475, 7735, 8129, 9054, 9885, 10064, 10083, 10267, 10281, 10472, 10473, 10479, 11150, 11185, 11430, 11507, 11872, 12480, 12541, 12544, 12635, 13591, 13593, 14221, 14300, 14347, 14759, 15153, 15188, 16512, 16905, 17420, 17484, 17536, 18193, 19206, 19355, 19397, 19747, 20728, 20735, 20745, 21126, 21675, 21770, 21790, 21791, 22456, 22808, 23245, 23699, 24177, 25280, 25332, 25703, 25937, 26009, 26010] \n", "\n", "yes 13 -> [621, 5693, 14068, 14745, 14889, 15944, 16798, 20057, 20140, 20292, 21314, 22386, 23719] \n", "\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "FbJ4bUqmkkTJ" }, "source": [ "\n", "---\n", "\n", "\n", "\n", "## CSV file kezelése\n", "\n" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "8qbJLP9pjcnU", "outputId": "d9c98848-8f01-441b-b7b7-f19584fa4ca9", "colab": { "base_uri": "https://localhost:8080/", "height": 34 } }, "source": [ "# modul betöltése\n", "import csv\n", "\n", "# olvasásra megnyitas\n", "csv1 = open('minta.csv', 'r')\n", "\n", "# változóba olvasás\n", "read = csv.reader(csv1) \n", "\n", "#tartalom megjelenitése soronként\n", "for row in read:\n", " print(row)\n" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "['volt', 2, [1, 4]]" ] }, "metadata": { "tags": [] }, "execution_count": 63 } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "EKpkCtbbla3l" }, "source": [ "\n", "---\n", "\n", "\n", "\n", "\n", "## WEB-ről file megnyitása\n", "\n" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "Qqd6KaXXos0S", "outputId": "f7aeeadb-f479-46b8-a8d1-8cb8f00ba48b", "colab": { "base_uri": "https://localhost:8080/", "height": 70 } }, "source": [ "# modulok betöltése\n", "import csv\n", "import requests\n", "\n", "#WEB cim megadása mint URL\n", "url = requests.get(\"https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data\")\n", "url.raise_for_status()\n", "szoveg=url.content.decode('utf-8') ## utf8 kódolással\n", "\n", "# újsorok/soronként vágás és beolvasása változóba\n", "szoveg2=szoveg.split(\"\\n\")\n", "\n", "szoveg3=[]\n", "for sz in szoveg2:\n", " # veszönként vágás és beolvasása változóba\n", " szoveg3.append(sz.split(\",\"))\n", "\n", "# megjelenités \n", "for sz2 in range(3): \n", " print(szoveg3[0])" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "['5.1', '3.5', '1.4', '0.2', 'Iris-setosa']\n", "['5.1', '3.5', '1.4', '0.2', 'Iris-setosa']\n", "['5.1', '3.5', '1.4', '0.2', 'Iris-setosa']\n" ], "name": "stdout" } ] } ] }