uvod u python nauČite python uvod u python dosadnih

49
AL SWEIGART PRAKTIČNO PROGRAMIRANJE ZA POČETNIKE UVOD U PYTHON Automatizovanje dosadnih poslova

Upload: others

Post on 04-Oct-2021

86 views

Category:

Documents


2 download

TRANSCRIPT

Ako ste ikada satima menjali nazive fajlova ili aurirali stotine elija u tabelama, znate koliko to moe biti dosadno i zamorno. Sreom, te poslove moe da izvrši raunar umesto vas.
U knjizi „Uvod u Python - Automatizovanje dosad- nih poslova“ nauiete kako da koristite Python za pisanje programa koji e za nekoliko minuta izvršiti ono što biste vi runo radili satima – nije potreb- no prethodno poznavanje programiranja. Kada nauite osnove programiranja, kreiraete Python programe koji bez napora izvršavaju korisne i im- presivne podvige automatizacije:
• pretrage teksta u fajlu ili u više fajlova • kreiranja, auriranja, pomeranja i menjanja naziva
fajlova i direktorijuma • pretrage Weba i preuzimanja online sadraja • auriranja i formatiranja podataka u Excel
tabelama bilo koje veliine • sastavljanja, spajanja, oznaavanja vodenim
igom i kodiranja PDF dokumenata
• slanja podsetnika e-mailom i tekstualnih obaveštenja
• popunjavanja online formulara
Instrukcije korak po korak vode vas kroz svaki pro- gram, a praktini projekti na kraju svakog poglavlja izazivaju vas da poboljšate te programe i upotrebite novootkrivene veštine za automatizaciju izvršava- nja slinih zadataka. Nemojte trošiti vreme na poslove koje moe da izvrši i dobro utrenirani majmun. ak i ako nikada niste napisali jednu liniju koda, raunar moe da izvrši posao umesto vas. Nauite kako da auto- matizujete dosadne poslove pomou Pythona.
O autoru Al Sweigart je programer i predaje programiranje za decu i odrasle. Napisao je nekoliko knjiga o Pythonu za poetnike, ukljuujui „Hacking Secret Ciphers with Python“, „Invent Your Own Computer Games with Python“ i „Making Games with Python & Pygame“.
ISBN: 978-86-7310-505-5
S W
E IG
A R
Izdava:
Autor: Al Sweigart
Prevod: Slavica Prudkov
Lektura: Miloš Jevtovi
Slog : Zvonko Aleksi
Štampa: „Pekograf“, Zemun
Izdanje: Prvo
ISBN: 978-86-7310-505-5
Automate the Boring Stuff with Python by Al Sweigart, ISBN: 978-1-59327-599-0 2015
Copyright © 2015 by Al Sweigart, No Starch Press, Inc. All right reserved. No part of this book may be reproduced or transmitted in any form or by means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Autorizovani prevod sa engleskog jezika edicije u izdanju „No Starch Press, Inc.”, Copyright © 2015.
Sva prava zadrana. Nije dozvoljeno da nijedan deo ove knjige bude reprodukovan ili snimljen na bilo koji nain ili bilo kojim sredstvom, elektronskim ili mehanikim, ukljuujui fotokopiranje, snimanje ili drugi sistem presnimavanja informacija, bez dozvole izdavaa.
Zaštitni znaci Kompjuter Biblioteka i „No Starch Press, Inc.” su pokušali da u ovoj knjizi razgranie sve zaštitne oznake od opisnih termina, pra- tei stil isticanja oznaka velikim slovima. Autor i izdava su uinili velike napore u pripremi ove knjige, iji je sadraj zasnovan na poslednjem (dostupnom) izdanju softvera. Delovi rukopisa su moda zasnovani na predizdanju softvera dobijenog od strane proizvoaa. Autor i izdava ne daju nikakve garancije u pogledu kompletnosti ili tanosti navoda iz ove knjige, niti prihvataju ikakvu odgovornost za performanse ili gubitke, odnosno ošteenja nastala kao direktna ili indirektna posledica korišenja informacija iz ove knjige.
CIP - ,
iiiiii
DEO I
POGLAVLJE 8 itanje i pisanje fajlova. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  173
iv Kratak sadraj
POGLAVLJE 10 Ispravljanje grešaka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  215
POGLAVLJE 12 Upotreba Excel tabela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  265
POGLAVLJE 13 Upotreba PDF i Word dokumenata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  295
POGLAVLJE 14 Upotreba CSV fajlova i JSON podataka  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  319
POGLAVLJE 15 Evidencija vremena, rasporeivanje zadataka i pokretanje programa  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  335
POGLAVLJE 16 Slanje e-maila i tekstualnih poruka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  361
POGLAVLJE 18 Kontrolisanje tastature i miša pomou GUI automatizacije. . . . . . . . . . . . . .  413
DODATAK A Instaliranje nezavisnih modula  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  441
DODATAK B Pokretanje programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  443
DODATAK C Odgovori na praktina pitanja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  447
INDEKS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  461
UVOD  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Za koga je ova knjiga? ................................................................................................................................... 2 Konvencije ......................................................................................................................................................... 2 Šta je programiranje?..................................................................................................................................... 3
Šta je Python? .......................................................................................................................................... 4 Programerima nije potrebno veliko poznavanje matematike ............................................... 4 Programiranje je kreativna aktivnost .............................................................................................. 5
O ovoj knjizi ....................................................................................................................................................... 5 Preuzimanje i instaliranje Pythona ........................................................................................................... 6 Pokretanje IDLE-a ............................................................................................................................................ 7
Interaktivna konzola .............................................................................................................................. 8 Pronalaenje pomoi ..................................................................................................................................... 8 „Pametno“ postavljanje programerskih pitanja .................................................................................. 9 Rezime ...............................................................................................................................................................10
DEO I
Unošenje izraza u interaktivnu konzolu ..............................................................................................14 Vrste podataka celog broja, pokretne take i niza ................................................................................16 Spajanje i ponavljanje niza .......................................................................................................................17 uvanje vrednosti u promenljivim ........................................................................................................18
Bulove (logike) vrednosti ........................................................................................................................32 Operatori poreenja ...................................................................................................................................33 Bulovi (logiki) operatori ...........................................................................................................................35
Binarni Bulovi operatori ....................................................................................................................35 Operator not .........................................................................................................................................36
Iskazi def sa parametrima .........................................................................................................................63 Vraene vrednosti i iskazi return ............................................................................................................63 Vrednost None ...............................................................................................................................................65 Argumenti kljune rei i funkcija print() ...............................................................................................65 Lokalni i globalni opseg vidljivosti ........................................................................................................66
Lokalne promenljive ne mogu da se upotrebe u globalnom opsegu vidljivosti ..........67 Lokalni opsezi vidljivosti ne mogu da koriste promenljive u drugim lokalnim
opsezima vidljivosti ......................................................................................................................68 Globalne promenljive mogu da se itaju iz lokalnog opsega vidljivosti .........................69 Lokalne i globalne promenljive koje imaju isti naziv .............................................................69
Iskaz global .....................................................................................................................................................70 Rukovanje izuzecima ..................................................................................................................................72 Kratak program: Guess the Number ......................................................................................................74
Primer programa: Magic 8 Ball sa listom ..............................................................................................92 Vrste sline listama: nizovi i zapisi ..........................................................................................................93
Promenljive i nepromenljive vrste podataka ............................................................................94 Vrsta podataka zapisa ........................................................................................................................96 Konvertovanje vrsta pomou funkcija list() i tuple() ................................................................97
Comma Code ..................................................................................................................................... 102 Character Picture Grid .................................................................................................................... 103
POGLAVLJE 5 105 Renici i strukturiranje podataka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  105
Vrsta podataka renika ............................................................................................................................ 105 Renici nasuprot listi ....................................................................................................................... 106 Metodi keys(), values() i items() .................................................................................................... 107 Provera da li klju ili vrednost postoje u reniku .................................................................. 109 Metod get() .......................................................................................................................................... 109 Metod setdefault() ............................................................................................................................ 110
viii Sadraj
Lepo štampanje .......................................................................................................................................... 111 Upotreba struktura podataka za modelovanje stvarnih stvari ................................................. 112
Tabla za Iks-oks igricu ..................................................................................................................... 113 Ugneeni renici i liste ................................................................................................................. 117
Rezime ........................................................................................................................................................... 119 Praktina pitanja ........................................................................................................................................ 119 Praktini projekti ....................................................................................................................................... 120
Inventar fantazi igre ........................................................................................................................ 120 Lista za funkcije renika za inventar fantazi igre .................................................................... 120
POGLAVLJE 6 123 Manipulisanje nizovima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  123
Upotreba nizova ........................................................................................................................................ 123 Literali niza ........................................................................................................................................... 124
Dvostruki navodnici ................................................................................................................. 124 Karakteri izlazne sekvence ..................................................................................................... 124 Nepreraeni nizovi .................................................................................................................. 125 Višelinijski nizovi sa trostrukim navodnicima ................................................................ 125 Višelinijski komentari ............................................................................................................... 126
Indeksiranje i isecanje nizova ....................................................................................................... 126 Operatori in i not in u nizovima .................................................................................................. 127
Korisni metodi niza ................................................................................................................................... 127 Metodi niza upper(), lower(), isupper() i islower() .................................................................. 128 Metodi niza isX .................................................................................................................................. 129 Metodi niza startswith() i endswith() .......................................................................................... 131 Metodi niza join() i split() ................................................................................................................ 131 Poravnanje teksta pomou rjust(), ljust() i center() metoda ............................................. 133 Uklanjanje karaktera razmaka pomou strip(), rstrip() i lstrip() metoda ....................... 134 Kopiranje i pejstovanje nizova pomou modula pyperclip .............................................. 135
Projekat: Klju lozinke .............................................................................................................................. 136 Korak 1: Dizajn programa i strukture podataka ..................................................................... 136 Korak 2: Upotrebite argumente komandne linije ................................................................. 137 Korak 3: Kopiranje prave lozinke ................................................................................................. 137
Projekat: Dodavanje oznake nabrajanja u Wiki lanak ................................................................ 139 Korak 1: Kopiranje i pejstovanje iz klipborda ......................................................................... 139 Korak 2: Razdvajanje linija teksta i dodavanje zvezde ......................................................... 140 Korak 3: Spajanje modifikovanih linija ...................................................................................... 141
Rezime ........................................................................................................................................................... 141 Praktina pitanja ........................................................................................................................................ 142 Praktini projekti ....................................................................................................................................... 143
Stoni štampa .................................................................................................................................... 143
ixSadraj
Kreiranje regex objekata ................................................................................................................ 150 Podudaranje regex objekata ........................................................................................................ 151 Pregled podudaranja regularnih izraza .................................................................................... 152
Više podudaranja šablona upotrebom regularnih izraza ........................................................... 152 Grupisanje pomou zagrada ........................................................................................................ 152 Podudaranje više grupa pomou vertikalne crte .................................................................. 153 Opciono podudaranje upotrebom upitnika ........................................................................... 154 Podudaranje nula ili više primera teksta pomou zvezdice ............................................. 155 Podudaranje jednog ili više primera teksta pomou znaka plus ..................................... 155 Podudaranje specifinih ponavljanja upotrebom velikih zagrada ................................ 156
„Gramzivo“ i „negramzivo“ podudaranje ......................................................................................... 156 Metod findall() ............................................................................................................................................. 157 Klase karaktera ........................................................................................................................................... 158 Kreiranje sopstvenih klasa karaktera .................................................................................................. 159 Karakteri znaka za umetanje i znaka za dolar ................................................................................. 159 Karakter zamene ........................................................................................................................................ 160
Podudaranje svega upotrebom take i zvezdice .................................................................. 161 Podudaranje novih linija pomou karaktera take .............................................................. 162
Pregled regex simbola ............................................................................................................................ 162 Podudaranje neosetljivo na veliinu slova ...................................................................................... 163 Zamena nizova pomou metoda sub() .............................................................................................. 163 Upravljanje sloenim regexima ........................................................................................................... 164 Kombinovanje promenljivih re .IGNORECASE, re .DOTALL i re.VERBOSE ............................. 164 Projekat: Ekstraktor telefonskog broja i e-mail adrese ................................................................ 165
Korak 1: Kreiranje regexa za brojeve telefona ........................................................................ 166 Korak 2: Kreiranje regexa za e-mail adrese .............................................................................. 166 Korak 3: Pronalaenje svih podudaranja u klipbord tekstu ............................................... 167 Korak 4: Spajanje podudaranja u niz za klipbord................................................................... 168 Pokretanje programa ...................................................................................................................... 169 Ideje za sline programe ................................................................................................................ 169
Rezime ........................................................................................................................................................... 169 Praktina pitanja ........................................................................................................................................ 170 Praktini projekti ....................................................................................................................................... 172
Detekcija jake lozinke ..................................................................................................................... 172 Regex verzija metoda strip() .......................................................................................................... 172
POGLAVLJE 8 173 itanje i pisanje fajlova. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  173
Fajlovi i putanje fajlova ........................................................................................................................... 173 Obrnuta kosa crta na Windowsu i kosa crta na OS X i Linuxu .......................................... 174 Aktuelni radni direktorijum .......................................................................................................... 175 Apsolutne, nasuprot relativnih putanja ................................................................................... 175 Kreiranje novih direktorijuma pomou funkcije os .makedirs() ....................................... 176
Modul os.path ............................................................................................................................................ 177 Rukovanje apsolutnim i relativnim putanjama ..................................................................... 177 Pronalaenje veliina fajla i sadraja direktorijuma ............................................................. 179 Provera validnosti putanje ............................................................................................................ 180
Proces itanja/pisanja fajla .................................................................................................................... 180 Otvaranje fajlova pomou funkcije open() .............................................................................. 181
x Sadraj
Snimanje promenljivih pomou modula shelve ........................................................................... 184 Snimanje promenljivih pomou funkcije pprint .pformat() ....................................................... 185 Projekat: Generisanje nasuminih fajlova za test .......................................................................... 186
Korak 1: uvanje podataka testa u reniku ............................................................................. 187 Korak 2: Kreiranje fajla testa i mešanje redosleda pitanja ................................................. 188 Korak 3: Kreiranje opcija za odgovor ......................................................................................... 189 Korak 4: Pisanje sadraja za test i fajlova za odgovore ....................................................... 189
Projekat: Multiklipbord ........................................................................................................................... 191 Korak 1: Komentari i podešavanja .............................................................................................. 192 Korak 2: Snimanje sadraja klipborda pomou kljunih rei ............................................ 192 Korak 3: Listanje kljunih rei i uitavanje sadraja kljune rei ...................................... 193
Rezime ........................................................................................................................................................... 194 Praktina pitanja ........................................................................................................................................ 194 Praktini projekti ....................................................................................................................................... 194
Proširenje multiklipborda .............................................................................................................. 194 Mad Lib program .............................................................................................................................. 195 Pretraivanje regexa ......................................................................................................................... 195
POGLAVLJE 9 197 Organizovanje fajlova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  197
Modul shutil ................................................................................................................................................ 198 Kopiranje fajlova i direktorijuma ................................................................................................. 198 Pomeranje i promena naziva fajlova i direktorijuma .......................................................... 199 Trajno brisanje fajlova i direktorijuma ...................................................................................... 200 Bezbedno brisanje pomou modula send2trash .................................................................. 201
Pregled stabla direktorijuma ................................................................................................................ 202 Kompresovanje fajlova pomou modula zipfile ............................................................................ 203
itanje ZIP fajlova ............................................................................................................................. 204 Ekstrahovanje iz ZIP fajlova .......................................................................................................... 205 Kreiranje i dodavanje u ZIP fajlove ............................................................................................. 205
Projekat: Menjanje naziva fajlova sa datuma u amerikom stilu na datum u evropskom stilu ...................................................................... 206
Korak 1: Kreiranje regexa za datume u amerikom stilu .................................................... 206 Korak 2: Identifikovanje delova datuma iz naziva fajlova .................................................. 207 Korak 3: Formiranje novih i promena postojeih naziva fajlova ..................................... 209 Ideje za sline programe ................................................................................................................ 209
Projekat: Kreiranje rezervne kopije direktorijuma u ZIP fajl ...................................................... 209 Korak 1: Razumevanje naziva ZIP fajla ...................................................................................... 210 Korak 2: Kreiranje novog ZIP fajla ............................................................................................... 211 Korak 3: Pregled stabla direktorijuma i dodavanje u ZIP fajl ............................................ 211 Ideje za sline programe ................................................................................................................ 212
Rezime ........................................................................................................................................................... 213 Praktina pitanja ........................................................................................................................................ 213 Praktini projekti ....................................................................................................................................... 213
Selektivno kopiranje ........................................................................................................................ 213 Brisanje nepotrebnih fajlova ........................................................................................................ 214 Popunjavanje praznina ................................................................................................................... 214
xiSadraj
POGLAVLJE 10 215 Ispravljanje grešaka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  215
Podizanje izuzetaka .................................................................................................................................. 216 Dobijanje povratne informacije kao niza ......................................................................................... 217 Navodi ........................................................................................................................................................... 219
Upotreba navoda u simulaciji semafora .................................................................................. 219 Iskljuivanje navoda ........................................................................................................................ 221
Evidentiranje ............................................................................................................................................... 221 Upotreba modula logging ............................................................................................................ 221 Nemojte ispravljati grešku pomou funkcije print() ............................................................. 223 Nivoi evidentiranja ........................................................................................................................... 223 Iskljuivanje evidentiranja ............................................................................................................. 224 Evidentiranje u fajl ........................................................................................................................... 225
IDLE-ova funkcija za ispravljanje greške ........................................................................................... 225 Go ........................................................................................................................................................... 226 Step ........................................................................................................................................................ 226 Over ....................................................................................................................................................... 226 Out ......................................................................................................................................................... 227 Quit ........................................................................................................................................................ 227 Ispravljanje grešaka u programu za dodavanje brojeva .................................................... 227 Take prekida ..................................................................................................................................... 229
Rezime ........................................................................................................................................................... 231 Praktina pitanja i zadaci ......................................................................................................................... 231 Praktini projekti ....................................................................................................................................... 232
Ispravljanje grešaka u programu bacanja novia ................................................................ 232
POGLAVLJE 11 233 Web isecanje  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  233
Projekat: mapIt .py sa modulom Webbrowser ............................................................................... 234 Korak 1: Otkrivanje URL-a .............................................................................................................. 234 Korak 2: Rukovanje argumentima komandne linije ............................................................. 235 Korak 3: Rukovanje sadrajem klipborda i pokretanje pretraivaa .............................. 236 Ideje za sline programe ................................................................................................................ 236
Preuzimanje fajlova sa Weba pomou modula Requests .......................................................... 237 Preuzimanje web stranica pomou funkcije requests.get() ............................................... 237 Provera grešaka ................................................................................................................................. 238
Snimanje preuzetih fajlova na hard drajv ........................................................................................ 239 HTML .............................................................................................................................................................. 240
Izvori za uenje HTML-a ................................................................................................................. 240 Kratak podsetnik ................................................................................................................................ 240 Pregled izvornog HTML-a web stranice ................................................................................... 241 Otvaranje alatki za programiranje u pretraivau ................................................................ 242 Upotreba alatki za programiranje za pronalaenje HTML elemenata .......................... 244
Analiza HTML-a pomou modula Beautiful Soup ......................................................................... 245 Kreiranje Beautiful Soup objekta iz HTML-a ........................................................................... 245 Pronalaenje elementa pomou metoda select() ................................................................. 246 Dobijanje podataka iz atributa elementa ................................................................................ 248
xii Sadraj
Projekat: “I’m Feeling Lucky” Google pretraga ............................................................................... 248 Korak 1: Upotreba argumenta komandne linije i traenje pretrage stranice ............. 249 Korak 2: Pronalaenje svih rezultata .......................................................................................... 249 Korak 3: Otvaranje web pretraivaa za svaki rezultat ........................................................ 250 Ideje za sline programe ................................................................................................................ 251
Projekat: Preuzimanje svih XKCD stripova ....................................................................................... 251 Korak 1: Dizajniranje programa ................................................................................................... 252 Korak 2: Preuzimanje web stranice ............................................................................................ 253 Korak 3: Pronalaenje i preuzimanje slike stripa ................................................................... 254 Korak 4: Snimanje slike i pronalaenje prethodnog stripa ................................................ 255 Ideje za sline programe ................................................................................................................ 256
Kontrola pretraivaa pomou modula Selenium ........................................................................ 256 Pokretanje pretraivaa kontrolisanog modulom Selenium ............................................ 256 Pronalaenje elemenata na stranici ........................................................................................... 257 Klik na stranicu .................................................................................................................................. 259 Popunjavanje i slanje formulara ................................................................................................. 259 Slanje specijalnih kljueva ............................................................................................................. 260 Klik na dugmad pretraivaa ........................................................................................................ 261 Više informacija o Seleniumu ....................................................................................................... 261
Rezime ............................................................................................................................................................ 261 Praktina pitanja ........................................................................................................................................ 261 Praktini projekti ....................................................................................................................................... 262
Program za slanje e-mailova iz komandne linije ................................................................... 262 Program za preuzimanje slika ...................................................................................................... 263 2048 ....................................................................................................................................................... 263 Potvrivanje linka .............................................................................................................................. 263
POGLAVLJE 12 265 Upotreba Excel tabela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  265
Excel dokumenti ........................................................................................................................................ 266 Instaliranje modula openpyxl ............................................................................................................... 266 itanje Excel dokumenata ..................................................................................................................... 266
Otvaranja Excel dokumenata pomou openpyxla ............................................................... 267 Dobijanje radnih listova iz radne sveske .................................................................................. 268 Dobijanje elija iz listova ............................................................................................................... 268 Konvertovanje izmeu slova i brojeva kolone ....................................................................... 270 Dobijanje redova i kolona iz listova ........................................................................................... 270 Radne sveske, radni listovi i elije ............................................................................................... 272
Projekat: itanje podataka iz tabele ................................................................................................... 272 Korak 1: itanje podataka iz tabele ............................................................................................ 273 Korak 2: Popunjavanje strukture podataka ............................................................................. 274 Korak 3: Pisanje rezultata u fajl .................................................................................................... 275 Ideje za sline programe ................................................................................................................ 276
Pisanje Excel dokumenata ..................................................................................................................... 277 Kreiranje i snimanje Excel dokumenata ................................................................................... 277 Kreiranje i uklanjanje radnih listova .......................................................................................... 278 Pisanje vrednosti u elije ............................................................................................................... 278
Projekat: Auriranje tabele .................................................................................................................... 279
xiiiSadraj
Korak 1: Podešavanje strukture podataka sa auriranim informacijama ..................... 280 Korak 2: Provera svih redova i auriranje nepravilnih cena ............................................... 281 Ideje za sline programe ................................................................................................................ 281
Podešavanje stila fonta elija ................................................................................................................ 282 Font objekti ................................................................................................................................................. 282 Formule ........................................................................................................................................................ 284 Podešavanje redova i kolona ................................................................................................................ 285
Podešavanje visine reda i širine kolone .................................................................................... 286 Spajanje i rastavljanje elija .......................................................................................................... 286 „Zamrznuta“ okna ............................................................................................................................ 287
Grafikoni ....................................................................................................................................................... 288 Rezime ........................................................................................................................................................... 290 Praktina pitanja ........................................................................................................................................ 291 Praktini projekti ....................................................................................................................................... 291
Kreator tablice mnoenja .............................................................................................................. 291 Ubaciva praznog reda ................................................................................................................... 292 Invertor elije tabele ........................................................................................................................ 292 Konvertovanje tekstualnih fajlova u tabelu ............................................................................ 293 Konvertovanje tabele u tekstualne fajlove ............................................................................. 293
POGLAVLJE 13 295 Upotreba PDF i Word dokumenata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  295
PDF dokumenti .......................................................................................................................................... 295 Ekstrahovanje teksta iz PDF fajlova ........................................................................................... 296 Dekodiranje PDF fajlova ................................................................................................................. 297 Kreiranje PDF fajlova ....................................................................................................................... 298
Kopiranje stranica ..................................................................................................................... 299 Rotiranje stranica ...................................................................................................................... 300 Preklapanje stranica ................................................................................................................ 301 Kodiranje PDF fajlova .............................................................................................................. 302
Projekat: Kombinovanje selektovanih stranica iz više PDF fajlova ................................................................................................................................ 303
Korak 1: Pronaite sve PDF fajlove ............................................................................................. 304 Korak 2: Otvorite svaki PDF ........................................................................................................... 304 Korak 3: Dodajte svaku stranicu .................................................................................................. 305 Korak 4: Snimite rezultate ............................................................................................................. 305 Ideje za sline programe ................................................................................................................ 306
Word dokumenti ....................................................................................................................................... 306 itanje Word dokumenata ............................................................................................................... 307 Dobijanje celog teksta iz .docx fajla .......................................................................................... 308 Stilizovanje objekata Paragraph i Run ....................................................................................... 309 Kreiranje Word dokumenata sa nestandardnim stilovima ................................................ 310 Atributi objekta Run ......................................................................................................................... 311 Pisanje Word dokumenata ............................................................................................................ 312 Dodavanje naslova .......................................................................................................................... 314 Dodavanje preloma reda i preloma stranice ........................................................................... 315 Dodavanje slika ................................................................................................................................. 315
Rezime ........................................................................................................................................................... 316
xiv Sadraj
Praktina pitanja ........................................................................................................................................ 316 Praktini projekti ....................................................................................................................................... 317
PDF paranoja ...................................................................................................................................... 317 Pozivnice kao Word dokumenti .................................................................................................. 317 Brutalni „rušitelj“ PDF lozinke ....................................................................................................... 318
POGLAVLJE 14 319 Upotreba CSV fajlova i JSON podataka  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  319
Modul csv ..................................................................................................................................................... 320 Objekti Reader ................................................................................................................................... 321 itanje podataka iz objekata Reader u petlji for ................................................................... 322 Objekti Writer ..................................................................................................................................... 322 Argumenti kljunih rei delimiter i lineterminator .............................................................. 323
Projekat: Uklanjanje zaglavlja iz CSV fajlova ................................................................................... 324 Korak 1: Kruenje kroz svaki CSV fajl .......................................................................................... 325 Korak 2: Uitavanje CSV fajla ........................................................................................................ 325 Korak 3: Ispisivanje CSV fajla bez prvog reda ......................................................................... 326 Ideje za sline programe ................................................................................................................ 327
JSON i API ..................................................................................................................................................... 327 Modul json ................................................................................................................................................... 328
itanje JSON-a pomou funkcije loads() ................................................................................... 328 Pisanje JSON-a pomou funkcije dumps() ............................................................................... 329
Projekat: Prikazivanje aktuelnih podataka o vremenskoj prognozi ....................................... 329 Korak 1: Dobijanje lokacije iz argumenta komandne linije ............................................... 330 Korak 2: Preuzimanje JSON podataka ....................................................................................... 330 Korak 3: Uitavanje JSON podataka i štampanje vremenske prognoze ....................... 331 Ideje za sline programe ................................................................................................................ 332
Rezime ........................................................................................................................................................... 333 Praktina pitanja ......................................................................................................................................... 333 Praktini projekat ...................................................................................................................................... 333
Konvertor Excel-u-CSV ..................................................................................................................... 333
Modul time .................................................................................................................................................. 336 Funkcija time .time() ......................................................................................................................... 336 Funkcija time.sleep() ........................................................................................................................ 337
Zaokruivanje brojeva ............................................................................................................................. 338 Projekat: Super štoperica ....................................................................................................................... 338
Korak 1: Podešavanje programa da prati vreme ................................................................... 339 Korak 2: Praenje i štampanje vremena kruga ....................................................................... 339 Ideje za sline programe ................................................................................................................ 340
Modul datetime ......................................................................................................................................... 341 Vrsta podataka timedelta .............................................................................................................. 342 Pauziranje do specifinog datuma ............................................................................................ 344 Konvertovanje datetime objekata u nizove ........................................................................... 344 Konvertovanje nizova u datetime objekte .............................................................................. 345
xvSadraj
Prosleivanje argumenata u ciljnu funkciju niti .................................................................... 348 Problemi konkurencije ................................................................................................................... 349
Projekat: Višenitni XKCD program za preuzimanje ....................................................................... 349 Korak 1: Modifikovanje programa da koristi funkciju ......................................................... 350 Korak 2: Kreiranje i pokretanje niti ............................................................................................. 351 Korak 3: Saekajte da se sve niti završe .................................................................................... 352
Pokretanje drugih programa iz Pythona .......................................................................................... 352 Prosleivanje argumenata komandne linije u funkciju Popen() ...................................... 354 Task Scheduler, launchd i cron .................................................................................................... 354 Otvaranje web sajtova pomou Pythona ................................................................................ 355 Pokretanje drugih Python skriptova ......................................................................................... 355 Otvaranje programa pomou standardnih aplikacija ......................................................... 355
Projekat: Jednostavan program za odbrojavanje ......................................................................... 357 Korak 1: Odbrojavanje .................................................................................................................... 357 Korak 2: Reprodukovanje zvunog fajla ................................................................................... 358 Ideje za sline programe ................................................................................................................ 358
Rezime ........................................................................................................................................................... 359 Praktina pitanja ........................................................................................................................................ 359 Praktini projekti ....................................................................................................................................... 360
„Ulepšana“ štoperica ....................................................................................................................... 360 Program za preuzimanje web stripova sa rasporedom ....................................................... 360
POGLAVLJE 16 361 Slanje e-maila i tekstualnih poruka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  361
SMTP .............................................................................................................................................................. 362 Slanje e-maila ............................................................................................................................................. 362
Povezivanje na SMTP server ......................................................................................................... 363 Slanje SMTP „Hello“ poruke .......................................................................................................... 364 Pokretanje TLS enkripcije .............................................................................................................. 364 Prijava na SMTP server .................................................................................................................... 364 Slanje e-maila ..................................................................................................................................... 365 Diskonektovanje sa SMTP servera .............................................................................................. 366
IMAP ............................................................................................................................................................... 366 Vraanje i brisanje e-mailova pomou IMAP-a ............................................................................... 366
Konektovanje na IMAP server ...................................................................................................... 367 Prijava na IMAP server .................................................................................................................... 368 Pretraivanje e-maila ....................................................................................................................... 368
Biranje direktorijuma ............................................................................................................... 368 Izvršavanje pretrage ................................................................................................................ 369 Ogranienja veliine ................................................................................................................ 371
Preuzimanje i oznaavanje e-maila kao proitanog ............................................................ 372 Dobijanje e-mail adrese iz neobraene poruke .................................................................... 373 Dobijanje teksta iz neobraene poruke ................................................................................... 374 Brisanje e-mailova ............................................................................................................................ 375 Diskonektovanje sa IMAP servera ............................................................................................... 375
Projekat: Slanje podsetnika za plaanje lanarine e-mailom .................................................... 376
xvi Sadraj
Korak 1: Otvaranje Excel fajla ....................................................................................................... 376 Korak 2: Pronalaenje svih lanova koji nisu platili lanarinu .......................................... 378 Korak 3: Slanje prilagoenih podsetnika e-mailom ............................................................. 378
Slanje tekstualnih poruka pomou servisa Twilio ......................................................................... 380 Prijava za Twilio nalog .................................................................................................................... 380 Slanje tekstualnih poruka .............................................................................................................. 381
Projekat: Just Text Me modul ................................................................................................................ 383 Rezime ........................................................................................................................................................... 384 Praktina pitanja ........................................................................................................................................ 384 Praktini projekti ....................................................................................................................................... 385
Program koji nasumino šalje e-mailove za izvršavanje zadataka .................................. 385 Podsetnik za kišobran ..................................................................................................................... 385 Automatska odjava .......................................................................................................................... 385 Kontrolisanje raunara korišenjem e-maila ........................................................................... 386
POGLAVLJE 17 387 Manipulisanje slikama  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  387
Osnove raunarskih slika ........................................................................................................................ 388 Boje i RGBA vrednosti ..................................................................................................................... 388 Koordinate i torke okvira ............................................................................................................... 389
Manipulisanje slikama pomou modula Pillow ............................................................................. 390 Upotreba vrste podataka slika ..................................................................................................... 392 Opsecanje slika .................................................................................................................................. 393 Kopiranje i pejstovanje slika u druge slike .............................................................................. 394 Promena veliine slike .................................................................................................................... 397 Rotiranje i preslikavanje slika ....................................................................................................... 398 Menjanje pojedinanih piksela ................................................................................................... 400
Projekat: Dodavanje logotipa ............................................................................................................... 401 Korak 1: Otvaranje slike logotipa ................................................................................................ 401 Korak 2: Kruenje kroz sve fajlove i otvaranje slika .............................................................. 402 Korak 3: Promena veliine slike ................................................................................................... 403 Korak 4: Dodavanje logotipa i snimanje promena ............................................................... 404 Ideje za sline programe ................................................................................................................ 406
Crtanje na slikama ...................................................................................................................................... 406 Crtanje oblika ..................................................................................................................................... 406
Take ............................................................................................................................................. 406 Linije .............................................................................................................................................. 406 Pravougaonici ............................................................................................................................ 407 Elipse ............................................................................................................................................. 407 Mnogougaonici ......................................................................................................................... 407 Primer crtanja ............................................................................................................................. 407
Crtanje teksta ..................................................................................................................................... 408 Rezime ........................................................................................................................................................... 410 Praktina pitanja ........................................................................................................................................ 410 Praktini projekti ....................................................................................................................................... 411
Proširenje i ispravljanje programa iz projekta poglavlja ..................................................... 411 Identifikovanje direktorijuma koji sadre fotografije na hard drajvu ............................ 411 Posebne kartice za sedišta ............................................................................................................. 412
xviiSadraj
Instaliranje modula pyautogui ............................................................................................................. 414 Ostajanje na putu ...................................................................................................................................... 414
Iskljuivanje svega odjavljivanjem ............................................................................................. 414 Pauze i bezbednost sistema u sluaju otkaza ........................................................................ 415
Kontrolisanje pokreta miša .................................................................................................................... 415 Pomeranje miša ................................................................................................................................ 416 Dobijanje pozicije miša .................................................................................................................. 417
Projekat: „Gde je moj miš trenutno?“ ................................................................................................. 417 Korak 1: Importovanje modula .................................................................................................... 418 Korak 2: Podešavanje koda za zatvaranje i beskonane petlje ........................................ 418 Korak 3: Dobijanje i štampanje koordinata miša .................................................................. 418
Kontrolisanje interakcije miša .............................................................................................................. 419 Klik mišem ........................................................................................................................................... 420 Prevlaenje miša ............................................................................................................................... 420 Skrolovanje tokia miša ............................................................................................................... 422
Upotreba ekrana ....................................................................................................................................... 423 Dobijanje snimka ekrana ............................................................................................................... 423 Analiziranje snimka ekrana ........................................................................................................... 424
Projekat: Proširenje programa mouseNow ...................................................................................... 424 Prepoznavanje slike ................................................................................................................................. 425 Kontrolisanje tastature ............................................................................................................................ 426
Slanje niza sa tastature ................................................................................................................... 426 Nazivi tastera ....................................................................................................................................... 427 Pritiskanje i otpuštanje tastature ................................................................................................ 428 Kombinacije „vruih“ tastera ........................................................................................................ 429
Pregled funkcija PyAutoGUI .................................................................................................................. 430 Projekat: Automatsko popunjavanje formulara ............................................................................ 430
Korak 1: Otkrivanje koraka ............................................................................................................ 432 Korak 2: Podešavanje koordinata ............................................................................................... 432 Korak 3: Poetak kucanja podataka ........................................................................................... 434 Korak 4: Rukovanje listama za selekciju i radio-dugmadima ............................................ 435 Korak 5: Prosleivanje formulara i ekanje ............................................................................. 436
Rezime ........................................................................................................................................................... 437 Praktina pitanja ........................................................................................................................................ 438 Praktini projekti ....................................................................................................................................... 438
Izgleda zauzeto ................................................................................................................................. 438 Robot za slanje poruka ................................................................................................................... 438 Uputstvo za robota za igranje igrice .......................................................................................... 439
DODATAK A 441 Instaliranje nezavisnih modula  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  441
Alatka pip ..................................................................................................................................................... 441 Instaliranje nezavisnih modula ............................................................................................................ 442
xviii Sadraj
DODATAK B 443 Pokretanje programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  443
Šebeng linija ............................................................................................................................................... 443 Pokretanje Python programa na Windowsu ................................................................................... 444 Pokretanje Python programa na OS X-u i Linuxu .......................................................................... 445 Pokretanje Python programa sa iskljuenim izjavama ............................................................... 445
DODATAK C 447 Odgovori na praktina pitanja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  447
Poglavlje 1 .................................................................................................................................................... 448 Poglavlje 2 .................................................................................................................................................... 448 Poglavlje 3 .................................................................................................................................................... 450 Poglavlje 4 .................................................................................................................................................... 450 Poglavlje 5 .................................................................................................................................................... 451 Poglavlje 6 .................................................................................................................................................... 452 Poglavlje 7 .................................................................................................................................................... 452 Poglavlje 8 .................................................................................................................................................... 453 Poglavlje 9 .................................................................................................................................................... 454 Poglavlje 10 .................................................................................................................................................. 454 Poglavlje 11 .................................................................................................................................................. 455 Poglavlje 12 .................................................................................................................................................. 456 Poglavlje 13 .................................................................................................................................................. 457 Poglavlje 14 .................................................................................................................................................. 458 Poglavlje 15 .................................................................................................................................................. 458 Poglavlje 16 .................................................................................................................................................. 458 Poglavlje 17 .................................................................................................................................................. 459 Poglavlje 18 .................................................................................................................................................. 459
INDEKS  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  461
1
UVOD
MOJ CIMER JE RADIO U PRODAVNICI ELEKTRONIKE. POVREMENO, PRODAVNICA JE PRIMALA TABELE SA CENAMA HILJADA PROIZVODA PO KOJIMA SU KONKU- RENTI PRODAVALI PROIZVODE. TIM OD TRI RADNIKA BI ŠTAMPAO TABELU I
DOBILI BI VELIKU GOMILU PAPIRA. ZA SVAKU CENU PROIZVODA U TABELI ONI BI POTRAILI CENU PO KOJOJ NJIHOVA PRODAVNICA PRODAJE PROIZVOD I BELE-
ILI SVE PROIZVODE KOJE SU KONKURENTI PRODAVALI JEFTINIJE. OVAJ POSAO JE, OBINO, TRAJAO NEKOLIKO DANA.
„Mogao bih da napišem program koji e to uraditi ako imate originalni fajl za štampu“, rekao im je moj cimer kada ih je video da sede na podu sa razbacanim i nagomilanim papirima oko sebe.
Nakon nekoliko sati, on je imao kratak program koji je itao cene konkurenata iz fajla, pronalazio proizvod u bazi podataka prodavnice i oznaavao da li je cena konkurenta nia. Ovaj program je zahtevao svega nekoliko sekundi za pokretanje.
To je mo raunarskog programiranja. Raunar je kao švajcarski vojni no koji moete da konfigurišete za bezbroj zadataka. Mnogi ljudi provode sate klikui i kucujui za
UVOD2
izvršavanje ponavljajuih zadataka i nisu svesni da mašina koju koriste moe da obavi taj posao za nekoliko sekundi ako joj se daju odgovarajue instrukcije.
Za koga je ova knjiga? Softver je, u osnovi, skup raznih alata koje danas koristimo. Skoro svako koristi društvene mree za komunikaciju, mnogi ljudi imaju raunare povezane na Internet u svojim tele- fonima i veina kancelarijskih poslova ukljuuj interakciju sa raunarom da bi posao bio izvršen. Kao rezultat svega toga, potranja za ljudima koji znaju da programiraju je u ogromnom porastu. Reklame za nebrojene knjige, interaktivne web tutorijale i kampove za programere obeavaju da e ambiciozne poetnike pretvoriti u softverske inenjere sa šestocifrenim zaradama.
Ova knjiga nije za ljude koji u to veruju. Ona je za sve ostale.
Ova knjiga vas nee pretvoriti u profesionalnog programera više nego što e nekoliko asova sviranja na gitari da vas pretvori u rok zvezdu. Meutim, ako obavljate kancelarijske poslove, poslove administratora, predavaa ili neki drugi posao za koji je potreban raunar za rad ili zabavu, nauiete osnove programiranja da biste mogli da automatizujete jedno- stavne zadatke, kao što su sledei:
pomeranje i promena naziva hiljada fajlova i sortiranje tih fajlova u direktorijume
popunjavanje online formulara, bez kucanja
preuzimanje fajlova ili kopija teksta sa web sajta kad god je auriran
podešavanje raunara da šalje odreena obaveštenja
auriranje i formatiranje Excel tabela
provera e-maila i slanje unapred napisanih odgovora
Ovi zadaci su jednostavni, ali korisnicima oduzimaju vreme i esto su veoma trivijalni ili specifini da ne postoji ve napisan softver za njihovo izvršenje. „Naoruani“ sa malo pro- gramerskog znanja, moete da obezbedite da raunar izvrši ove zadatke umesto vas.
Konvencije Ova knjiga nije dizajnirana kao referentni prirunik; ovo je vodi za poetnike. Stil pro- gramiranja je ponekad suprotan najboljoj praksi (na primer, neki programi koriste globalne varijable), ali to je kompromis da bi kod bio jednostavniji za uenje. Ova knjiga je napi- sana za ljude koji ele da napišu jednostavan kod, pa se ne troši vreme na stil i eleganciju programa. Sofisticirani koncepti programiranja, kao što su objektno-orijentisano progra- miranje, sagledavanje liste i generatori, nisu opisani u ovoj knjizi zbog sloenosti koju oni dodaju programu. Iskusni programeri mogu da ukau na naine na koji kod u ovoj knjizi
Šta je programiranje? 3
moe da se promeni i poboljša efikasnost, ali ova knjiga iskljuivo je fokusirana na pokre- tanje programa sa najmanje mogue uloenog truda.
Šta je programiranje? U TV emisijama i filmovima esto se prikazuju programeri koji furiozno kucaju zagonetne nizove jedinica i nula na blještavim ekranima, ali moderno programiranje nije toliko miste- riozno. Programiranje je jednostavan in unošenja instrukcija koje raunar treba da izvrši. Ove instrukcije mogu da ukljuuju neke brojeve, modifikovanje teksta ili potragu za infor- macijama u fajlovima ili da komuniciraju sa drugim raunarima posredstvom Interneta.
Svi programi koriste osnovne instrukcije kao gradivne blokove. Evo nekoliko naješe upo- trebljavanih (na engleskom jeziku):
Do this; then do that. (Uradi ovo; zatim uradi ono.) If this condition is true, perform this action; otherwise, do that action. (Ako je ovaj uslov taan, izvrši ovu akciju; u suprotnom, izvrši onu akciju.) Do this action that number of times. (Izvrši ovu akciju toliko puta.) Keep doing that until this condition is true. (Nastavi izvršenje dok je ovaj uslov taan.)
Takoe moete da kombinujete ove gradivne blokove da biste implementirali sloenije odluke. Na primer, ovo su programerske instrukcije, pod nazivom izvorni kod, za jedno- stavan program koji je napisan Python programskim jezikom. Poevši od vrha, Python sof- tver pokree svaku liniju koda (neke linije se pokreu samo ako je odreeni uslov taan; u suprotnom, Python pokree neku drugu liniju), dok ne doe do kraja.
u passwordFile = open('SecretPasswordFile.txt') v secretPassword = passwordFile.read() w print('Enter your passw