{"id":41,"date":"2019-02-27T08:28:07","date_gmt":"2019-02-27T08:28:07","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/?post_type=chapter&#038;p=41"},"modified":"2019-06-08T07:14:26","modified_gmt":"2019-06-08T07:14:26","slug":"lisalugemine-csv","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/chapter\/lisalugemine-csv\/","title":{"raw":"Lisalugemine: CSV","rendered":"Lisalugemine: CSV"},"content":{"raw":"<h1>CSV-vorming<\/h1>\r\nCSV (ingl <em>Comma-separated values<\/em>, komadega eraldatud v\u00e4\u00e4rtused) on levinud failivorming erinevate (tekstiliste v\u00f5i arvuliste) andmete hoidmiseks.\r\n\r\nLihtsa CSV-faili sisu v\u00f5ib olla selline:\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">Albert;Algoritm;2010\r\nDonna;Definitsioon;1998<\/pre>\r\nOlemuselt on CSV tavaline tekstifail, mille failivorming on \"<em>.csv<\/em>\". Faili iga rida s\u00fcmboliseerib midagi: \u00fcht isikut, veebilehte, termomeetri n\u00e4itu kindlal ajahetkel vms. \u00dche CSV-faili piires on igal real samalaadsed v\u00e4\u00e4rtused, n\u00e4iteks isikute korral eesnimi, perenimi, s\u00fcnnikuup\u00e4ev. \u00dchel real olevad v\u00e4\u00e4rtused on \u00fcksteisest eraldatud kindla s\u00fcmboliga. Klassikaliselt on eraldaja olnud koma (sellest ka failivormingu nimetus), kuid praktilisem v\u00f5ib olla kasutada n\u00e4iteks semikoolonit (eestikeelsed murdarvud kirjutatakse tihti komaga, mis tekitaks lugemisel probleeme).\r\n<h1>CSV-faili lugemine tavafailina<\/h1>\r\nMe v\u00f5ime CSV-faili avada nagu iga teise sisendfaili ning selle ridu tekstina t\u00f6\u00f6delda:\r\n<div class=\"vspace\"><\/div>\r\n<div>\r\n<div class=\"syntaxhighlighter nogutter python\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">fail = open(\"minufail.csv\", encoding=\"UTF-8\")\r\nandmed = []\r\nfor rida in fail:  # loeme ridahaaval\r\n    osad = rida.split(\";\")  # semikoolonitega eraldatud s\u00f5ne muudame j\u00e4rjendiks\r\n    andmed.append(osad)\r\nfail.close()<\/pre>\r\n<\/div>\r\n<\/div>\r\n<h1>CSV-faili lugemine mooduliga <em>csv<\/em><\/h1>\r\n<p class=\"vspace\">Kuna CSV-failidega lugemist tuleb tihti ette, on selleks eraldi Pythoni moodul nimega <a class=\"urllink\" href=\"https:\/\/docs.python.org\/3\/library\/csv.html\" target=\"_blank\" rel=\"noopener noreferrer\">csv<\/a>. Tegemist on Pythoni standardmooduliga, mille kasutamine tuleb programmi alguses n\u00e4idata <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import csv<\/code><\/code> abil. Selle abil saame CSV-faili lugeda nii:<\/p>\r\n\r\n<div>\r\n<div class=\"syntaxhighlighter nogutter python\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">import csv\r\n \r\nandmed = []\r\n \r\ncsvfail = open('minufail.csv', encoding='UTF-8')\r\nloetudCSV = csv.reader(csvfail, delimiter=';')\r\n \r\nfor rida in loetudCSV:\r\n    andmed.append(rida)\r\n\r\ncsvfail.close()<\/pre>\r\nEelnevas n\u00e4ites polnud mooduliga kood eriti lihtsam, kuid keerukamates oludes on mooduli kasutamine rohkem tulus.\r\n\r\n<\/div>\r\n<\/div>\r\n<h1>Avalikud andmed<\/h1>\r\n<p class=\"vspace\">V\u00e4ga palju andmeid elust enesest on tegelikult t\u00e4iesti vabalt k\u00e4ttesaadavad ja kasutatavad. Eesti kohta leiab huvitavaid andmeid n\u00e4iteks <a class=\"urllink\" href=\"http:\/\/www.stat.ee\/\" target=\"_blank\" rel=\"noopener noreferrer\">statistikaameti veebilehelt<\/a>.<\/p>\r\n<p class=\"vspace\">N\u00e4iteks leidub statistikaameti kodulehel andmeid Eesti rahvastiku soolise koossesisu kohta erinevates vanuser\u00fchmades.<\/p>\r\n\r\n<div class=\"vspace\"><\/div>\r\n<div class=\"img imgonly\"><img title=\"\" src=\"https:\/\/courses.cs.ut.ee\/2019\/eprogalused2\/spring\/uploads\/Main\/rahvastik.png\" alt=\"\" \/><\/div>\r\n<p class=\"vspace\">Selle tabeli p\u00f5hjal saaks lahendada erinevaid \u00fclesandeid. N\u00e4iteks saab leida:<\/p>\r\n\r\n<ul>\r\n \t<li>mis vanuses elanikke on k\u00f5ige rohkem,<\/li>\r\n \t<li>mis vanuser\u00fchmas on meeste ja naiste arvuline erinevus k\u00f5ige suurem,<\/li>\r\n \t<li>teatud vanuser\u00fchma elanike arvu.<\/li>\r\n<\/ul>\r\n<p class=\"vspace\">Haridusteemalisi andmeid saab <a class=\"urllink\" href=\"http:\/\/haridussilm.ee\/\" target=\"_blank\" rel=\"noopener noreferrer\">Haridussilmast<\/a>. Haridussilmast v\u00f5iksime leida n\u00e4iteks nelja \u00fclikooli vilistlaste keskmised palgad erialade kaupa. Haridussilmast saab andmeid alla laadida k\u00fcll ainult (Exceli) <em>xls<\/em>-vormingus, kuid tabelt\u00f6\u00f6tlusprogrammis saab selle faili ka <em>csv<\/em>-vormingusse salvestada.<\/p>\r\n\r\n<div class=\"vspace\"><\/div>\r\n<div class=\"img imgonly\"><img title=\"\" src=\"https:\/\/courses.cs.ut.ee\/2019\/eprogalused2\/spring\/uploads\/Main\/palgad.png\" alt=\"\" \/><\/div>\r\n<h2>Andmet\u00f6\u00f6tlus: Tartu rahvastik<\/h2>\r\n<p class=\"vspace\">J\u00e4rgmise n\u00e4ite puhul p\u00fc\u00fcame teada saada, mis aastatel on Tartu elanike arv kasvanud. Statistikaameti <a class=\"urllink\" href=\"http:\/\/www.stat.ee\/\" target=\"_blank\" rel=\"noopener noreferrer\">veebilehelt<\/a> saab Tartu elanike arvud k\u00e4tte j\u00e4rgmiste valikutega: <em>Statistika andmebaas<\/em> -&gt; <em>Rahvastik<\/em> -&gt; <em>Rahvastikun\u00e4itajad ja koosseis<\/em> -&gt; <em>Rahvaarv ja rahvastiku koosseis<\/em> -&gt; <em>RV0282 Rahvastik soo, vanuser\u00fchma ja haldus\u00fcksuse v\u00f5i asustus\u00fcksuse liigi j\u00e4rgi, 1. jaanuar<\/em> (<a class=\"urllink\" href=\"http:\/\/pub.stat.ee\/px-web.2001\/Dialog\/varval.asp?ma=RV0282&amp;ti=RAHVASTIK+SOO%2C+VANUSER%DCHMA+JA+HALDUS%DCKSUSE+V%D5I+ASUSTUS%DCKSUSE+LIIGI+J%C4RGI%2C+1%2E+JAANUAR&amp;path=..\/Database\/Rahvastik\/01Rahvastikunaitajad_ja_koosseis\/04Rahvaarv_ja_rahvastiku_koosseis\/&amp;lang=2\" target=\"_blank\" rel=\"noopener noreferrer\">otselink<\/a>).<\/p>\r\n<p class=\"vspace\">Andmete salvestamisel on v\u00f5imalik valida, mis kujul me neid faili tahame. Hetkel on sobiv <em>Ilma pealkirjata Semikooloneraldusega pealkirjata tekst (.csv)<\/em>. Nii saame faili <a class=\"urllink\" href=\"https:\/\/courses.cs.ut.ee\/2019\/eprogalused2\/spring\/uploads\/Main\/RV0282sm.csv\" target=\"_blank\" rel=\"noopener noreferrer\">RV0282sm.csv<\/a>, mille esimene rida on<\/p>\r\n\r\n<div>\r\n<div class=\"syntaxhighlighter nogutter python\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">\"..Tartu linn\";\"Mehed ja naised\";\"2000\";106200<\/pre>\r\n<\/div>\r\n<\/div>\r\n<p class=\"vspace\">N\u00e4eme, et meid eriti huvitavad andmed on rea l\u00f5pus m\u00f5nev\u00f5rra erineval kujul - aastaarvul on jutum\u00e4rgid \u00fcmber ja elanike arvul mitte. Kui n\u00fc\u00fcd eeltoodud moel fail sisse lugeda ja rida osadeks jaotada, siis saame, et <code>osad[2]<\/code> on s\u00f5ne <code>\"\"2000\"\"<\/code> ja <code>osad[3]<\/code> on s\u00f5ne <code>\"106200\"<\/code>. Meie tahame neid m\u00f5lemaid t\u00e4isarvudena, mida annab funktsioon <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">int<\/code>. K\u00fcll aga tuleb <code>\"\"2000\"\"<\/code> puhul arvu \u00fcmbert s\u00f5nesisesed jutum\u00e4rgid eemaldada, mida saame teha funktsiooni <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">strip<\/code><\/code> abil: <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">osad[2].strip('\"')<\/code><\/code>.<\/p>\r\n<p class=\"vspace\">J\u00e4rgmises programmis paneme saadud andmed j\u00e4rjendisse nii, et \u00fches reas (<code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">andmed[0]<\/code><\/code>) on k\u00f5ik aastaarvud ja teises (<code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">andmed[1]<\/code><\/code>) k\u00f5ik elanike arvud. Failis olid erinevate aastate andmed erinevatel ridadel.<\/p>\r\n\r\n<div class=\"vspace\"><\/div>\r\n<div>\r\n<div class=\"syntaxhighlighter nogutter python\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">fail = open(\"RV0282sm.csv\", encoding=\"UTF-8\")\r\nandmed = [[], []]\r\nfor rida in fail:  # loeme ridahaaval\r\n    osad = rida.split(\";\")  # semikoolonitega eraldatud s\u00f5ne j\u00e4rjendiks\r\n    andmed[0].append(int(osad[2].strip('\"')))\r\n    andmed[1].append(int(osad[3]))\r\nfail.close()<\/pre>\r\n<\/div>\r\n<\/div>\r\n<p class=\"vspace\">Kui n\u00fc\u00fcd tahame leida aastad, mil elanike arv kasvas, siis v\u00f5rdleme iga aasta korral, kas j\u00e4rgmise aasta elanike arv on suurem. Kuna andmed on 1. jaanuari seisuga, siis t\u00e4pselt \u00fche aasta kaupa saamegi muudatusi nii j\u00e4lgida.<\/p>\r\n\r\n<div class=\"vspace\"><\/div>\r\n<div>\r\n<div class=\"syntaxhighlighter nogutter python\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">for i in range(len(andmed[0]) - 1):\r\n    if andmed[1][i + 1] &gt; andmed[1][i]:\r\n        print(andmed[0][i])<\/pre>\r\n<\/div>\r\n<\/div>\r\n<p class=\"vspace\">Siin on oluline, et ts\u00fckkel l\u00f5peb eelviimase elemendiga, sest viimasel elemendil poleks j\u00e4rgmist (<code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">andmed[1][i + 1]<\/code><\/code>), millega v\u00f5rrelda.<\/p>\r\n<p class=\"vspace\">Sarnase tulemuse v\u00f5ime saavutada ka mooduliga <em>csv<\/em>:<\/p>\r\n\r\n<div>\r\n<div class=\"syntaxhighlighter nogutter python\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">import csv\r\n \r\nandmed = [[], []]\r\n \r\ncsvfail = open('RV0282sm.csv', encoding='UTF-8')\r\nloetudCSV = csv.reader(csvfail, delimiter=';')\r\n \r\nfor rida in loetudCSV:\r\n    andmed[0].append(int(rida[2]))\r\n    andmed[1].append(int(rida[3]))\r\n \r\ncsvfail.close()\r\n \r\nfor i in range(len(andmed[0]) - 1):\r\n    if andmed[1][i + 1] &gt; andmed[1][i]:\r\n        print(andmed[0][i])<\/pre>\r\n&nbsp;\r\n\r\n<\/div>\r\n<\/div>","rendered":"<h1>CSV-vorming<\/h1>\n<p>CSV (ingl <em>Comma-separated values<\/em>, komadega eraldatud v\u00e4\u00e4rtused) on levinud failivorming erinevate (tekstiliste v\u00f5i arvuliste) andmete hoidmiseks.<\/p>\n<p>Lihtsa CSV-faili sisu v\u00f5ib olla selline:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">Albert;Algoritm;2010\r\nDonna;Definitsioon;1998<\/pre>\n<p>Olemuselt on CSV tavaline tekstifail, mille failivorming on &#8220;<em>.csv<\/em>&#8220;. Faili iga rida s\u00fcmboliseerib midagi: \u00fcht isikut, veebilehte, termomeetri n\u00e4itu kindlal ajahetkel vms. \u00dche CSV-faili piires on igal real samalaadsed v\u00e4\u00e4rtused, n\u00e4iteks isikute korral eesnimi, perenimi, s\u00fcnnikuup\u00e4ev. \u00dchel real olevad v\u00e4\u00e4rtused on \u00fcksteisest eraldatud kindla s\u00fcmboliga. Klassikaliselt on eraldaja olnud koma (sellest ka failivormingu nimetus), kuid praktilisem v\u00f5ib olla kasutada n\u00e4iteks semikoolonit (eestikeelsed murdarvud kirjutatakse tihti komaga, mis tekitaks lugemisel probleeme).<\/p>\n<h1>CSV-faili lugemine tavafailina<\/h1>\n<p>Me v\u00f5ime CSV-faili avada nagu iga teise sisendfaili ning selle ridu tekstina t\u00f6\u00f6delda:<\/p>\n<div class=\"vspace\"><\/div>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">fail = open(\"minufail.csv\", encoding=\"UTF-8\")\r\nandmed = []\r\nfor rida in fail:  # loeme ridahaaval\r\n    osad = rida.split(\";\")  # semikoolonitega eraldatud s\u00f5ne muudame j\u00e4rjendiks\r\n    andmed.append(osad)\r\nfail.close()<\/pre>\n<\/div>\n<\/div>\n<h1>CSV-faili lugemine mooduliga <em>csv<\/em><\/h1>\n<p class=\"vspace\">Kuna CSV-failidega lugemist tuleb tihti ette, on selleks eraldi Pythoni moodul nimega <a class=\"urllink\" href=\"https:\/\/docs.python.org\/3\/library\/csv.html\" target=\"_blank\" rel=\"noopener noreferrer\">csv<\/a>. Tegemist on Pythoni standardmooduliga, mille kasutamine tuleb programmi alguses n\u00e4idata <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import csv<\/code><\/code> abil. Selle abil saame CSV-faili lugeda nii:<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">import csv\r\n \r\nandmed = []\r\n \r\ncsvfail = open('minufail.csv', encoding='UTF-8')\r\nloetudCSV = csv.reader(csvfail, delimiter=';')\r\n \r\nfor rida in loetudCSV:\r\n    andmed.append(rida)\r\n\r\ncsvfail.close()<\/pre>\n<p>Eelnevas n\u00e4ites polnud mooduliga kood eriti lihtsam, kuid keerukamates oludes on mooduli kasutamine rohkem tulus.<\/p>\n<\/div>\n<\/div>\n<h1>Avalikud andmed<\/h1>\n<p class=\"vspace\">V\u00e4ga palju andmeid elust enesest on tegelikult t\u00e4iesti vabalt k\u00e4ttesaadavad ja kasutatavad. Eesti kohta leiab huvitavaid andmeid n\u00e4iteks <a class=\"urllink\" href=\"http:\/\/www.stat.ee\/\" target=\"_blank\" rel=\"noopener noreferrer\">statistikaameti veebilehelt<\/a>.<\/p>\n<p class=\"vspace\">N\u00e4iteks leidub statistikaameti kodulehel andmeid Eesti rahvastiku soolise koossesisu kohta erinevates vanuser\u00fchmades.<\/p>\n<div class=\"vspace\"><\/div>\n<div class=\"img imgonly\"><img decoding=\"async\" title=\"\" src=\"https:\/\/courses.cs.ut.ee\/2019\/eprogalused2\/spring\/uploads\/Main\/rahvastik.png\" alt=\"\" \/><\/div>\n<p class=\"vspace\">Selle tabeli p\u00f5hjal saaks lahendada erinevaid \u00fclesandeid. N\u00e4iteks saab leida:<\/p>\n<ul>\n<li>mis vanuses elanikke on k\u00f5ige rohkem,<\/li>\n<li>mis vanuser\u00fchmas on meeste ja naiste arvuline erinevus k\u00f5ige suurem,<\/li>\n<li>teatud vanuser\u00fchma elanike arvu.<\/li>\n<\/ul>\n<p class=\"vspace\">Haridusteemalisi andmeid saab <a class=\"urllink\" href=\"http:\/\/haridussilm.ee\/\" target=\"_blank\" rel=\"noopener noreferrer\">Haridussilmast<\/a>. Haridussilmast v\u00f5iksime leida n\u00e4iteks nelja \u00fclikooli vilistlaste keskmised palgad erialade kaupa. Haridussilmast saab andmeid alla laadida k\u00fcll ainult (Exceli) <em>xls<\/em>-vormingus, kuid tabelt\u00f6\u00f6tlusprogrammis saab selle faili ka <em>csv<\/em>-vormingusse salvestada.<\/p>\n<div class=\"vspace\"><\/div>\n<div class=\"img imgonly\"><img decoding=\"async\" title=\"\" src=\"https:\/\/courses.cs.ut.ee\/2019\/eprogalused2\/spring\/uploads\/Main\/palgad.png\" alt=\"\" \/><\/div>\n<h2>Andmet\u00f6\u00f6tlus: Tartu rahvastik<\/h2>\n<p class=\"vspace\">J\u00e4rgmise n\u00e4ite puhul p\u00fc\u00fcame teada saada, mis aastatel on Tartu elanike arv kasvanud. Statistikaameti <a class=\"urllink\" href=\"http:\/\/www.stat.ee\/\" target=\"_blank\" rel=\"noopener noreferrer\">veebilehelt<\/a> saab Tartu elanike arvud k\u00e4tte j\u00e4rgmiste valikutega: <em>Statistika andmebaas<\/em> -&gt; <em>Rahvastik<\/em> -&gt; <em>Rahvastikun\u00e4itajad ja koosseis<\/em> -&gt; <em>Rahvaarv ja rahvastiku koosseis<\/em> -&gt; <em>RV0282 Rahvastik soo, vanuser\u00fchma ja haldus\u00fcksuse v\u00f5i asustus\u00fcksuse liigi j\u00e4rgi, 1. jaanuar<\/em> (<a class=\"urllink\" href=\"http:\/\/pub.stat.ee\/px-web.2001\/Dialog\/varval.asp?ma=RV0282&amp;ti=RAHVASTIK+SOO%2C+VANUSER%DCHMA+JA+HALDUS%DCKSUSE+V%D5I+ASUSTUS%DCKSUSE+LIIGI+J%C4RGI%2C+1%2E+JAANUAR&amp;path=..\/Database\/Rahvastik\/01Rahvastikunaitajad_ja_koosseis\/04Rahvaarv_ja_rahvastiku_koosseis\/&amp;lang=2\" target=\"_blank\" rel=\"noopener noreferrer\">otselink<\/a>).<\/p>\n<p class=\"vspace\">Andmete salvestamisel on v\u00f5imalik valida, mis kujul me neid faili tahame. Hetkel on sobiv <em>Ilma pealkirjata Semikooloneraldusega pealkirjata tekst (.csv)<\/em>. Nii saame faili <a class=\"urllink\" href=\"https:\/\/courses.cs.ut.ee\/2019\/eprogalused2\/spring\/uploads\/Main\/RV0282sm.csv\" target=\"_blank\" rel=\"noopener noreferrer\">RV0282sm.csv<\/a>, mille esimene rida on<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">\"..Tartu linn\";\"Mehed ja naised\";\"2000\";106200<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">N\u00e4eme, et meid eriti huvitavad andmed on rea l\u00f5pus m\u00f5nev\u00f5rra erineval kujul &#8211; aastaarvul on jutum\u00e4rgid \u00fcmber ja elanike arvul mitte. Kui n\u00fc\u00fcd eeltoodud moel fail sisse lugeda ja rida osadeks jaotada, siis saame, et <code>osad[2]<\/code> on s\u00f5ne <code>\"\"2000\"\"<\/code> ja <code>osad[3]<\/code> on s\u00f5ne <code>\"106200\"<\/code>. Meie tahame neid m\u00f5lemaid t\u00e4isarvudena, mida annab funktsioon <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">int<\/code>. K\u00fcll aga tuleb <code>\"\"2000\"\"<\/code> puhul arvu \u00fcmbert s\u00f5nesisesed jutum\u00e4rgid eemaldada, mida saame teha funktsiooni <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">strip<\/code><\/code> abil: <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">osad[2].strip('\"')<\/code><\/code>.<\/p>\n<p class=\"vspace\">J\u00e4rgmises programmis paneme saadud andmed j\u00e4rjendisse nii, et \u00fches reas (<code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">andmed[0]<\/code><\/code>) on k\u00f5ik aastaarvud ja teises (<code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">andmed[1]<\/code><\/code>) k\u00f5ik elanike arvud. Failis olid erinevate aastate andmed erinevatel ridadel.<\/p>\n<div class=\"vspace\"><\/div>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">fail = open(\"RV0282sm.csv\", encoding=\"UTF-8\")\r\nandmed = [[], []]\r\nfor rida in fail:  # loeme ridahaaval\r\n    osad = rida.split(\";\")  # semikoolonitega eraldatud s\u00f5ne j\u00e4rjendiks\r\n    andmed[0].append(int(osad[2].strip('\"')))\r\n    andmed[1].append(int(osad[3]))\r\nfail.close()<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Kui n\u00fc\u00fcd tahame leida aastad, mil elanike arv kasvas, siis v\u00f5rdleme iga aasta korral, kas j\u00e4rgmise aasta elanike arv on suurem. Kuna andmed on 1. jaanuari seisuga, siis t\u00e4pselt \u00fche aasta kaupa saamegi muudatusi nii j\u00e4lgida.<\/p>\n<div class=\"vspace\"><\/div>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">for i in range(len(andmed[0]) - 1):\r\n    if andmed[1][i + 1] &gt; andmed[1][i]:\r\n        print(andmed[0][i])<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Siin on oluline, et ts\u00fckkel l\u00f5peb eelviimase elemendiga, sest viimasel elemendil poleks j\u00e4rgmist (<code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">andmed[1][i + 1]<\/code><\/code>), millega v\u00f5rrelda.<\/p>\n<p class=\"vspace\">Sarnase tulemuse v\u00f5ime saavutada ka mooduliga <em>csv<\/em>:<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">import csv\r\n \r\nandmed = [[], []]\r\n \r\ncsvfail = open('RV0282sm.csv', encoding='UTF-8')\r\nloetudCSV = csv.reader(csvfail, delimiter=';')\r\n \r\nfor rida in loetudCSV:\r\n    andmed[0].append(int(rida[2]))\r\n    andmed[1].append(int(rida[3]))\r\n \r\ncsvfail.close()\r\n \r\nfor i in range(len(andmed[0]) - 1):\r\n    if andmed[1][i + 1] &gt; andmed[1][i]:\r\n        print(andmed[0][i])<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n","protected":false},"author":12,"menu_order":2,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-41","chapter","type-chapter","status-publish","hentry"],"part":26,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/chapters\/41","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/wp\/v2\/users\/12"}],"version-history":[{"count":5,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/chapters\/41\/revisions"}],"predecessor-version":[{"id":227,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/chapters\/41\/revisions\/227"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/parts\/26"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/chapters\/41\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/wp\/v2\/media?parent=41"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/pressbooks\/v2\/chapter-type?post=41"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/wp\/v2\/contributor?post=41"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara\/wp-json\/wp\/v2\/license?post=41"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}