You are on page 1of 51

Szkriptnyelvek

Dr. Dombi József Dániel


Antal Gábor

Szegedi Tudományegyetem
Informatikai Intézet
Szoftverfejlesztés Tanszék

2018

Szkriptnyelvek 2018 Python 1 / 51


Tartalom

Shorthandek Dátum és idő


1 Python Parancssori paraméterek JSON kezelés
Beépített függvénykönyvtárak Véletlen generátor Egyebek

Szkriptnyelvek 2018 Python 2 / 51


Tartalom

Shorthandek Dátum és idő


1 Python Parancssori paraméterek JSON kezelés
Beépített függvénykönyvtárak Véletlen generátor Egyebek

Szkriptnyelvek 2018 Python Beépített függvénykönyvtárak 3 / 51


Tartalom

Shorthandek Dátum és idő


1 Python Parancssori paraméterek JSON kezelés
Beépített függvénykönyvtárak Véletlen generátor Egyebek

Szkriptnyelvek 2018 Python Shorthandek 4 / 51


If-else shorthand

Más nyelvekből ismerős lehet az alábbi ternary szintaxis

condition ? e xp re ss i on _t ru e : e x p r e ss i o n _ f a l s e

i n t kor = 17;
String k = ( kor < 18) ? " fiatal " : " feln ő tt " ;

Pythonban is létezik, de kicsit másképp néz ki:

e xp re ss i on _t ru e i f condition e l s e e x p r e s s i o n _ f al s e

kor = i n t ( i n p u t ( ’ Kor : ’ ))
kor_str = " fiatal " i f kor < 18 e l s e " feln ő tt "

Szkriptnyelvek 2018 Python Shorthandek 5 / 51


If-else shorthand

Egymásba is ágyazható (ez bizonyos mértékig kedvező csak)

kor = 12 # int ( input ( ’ Kor : ’))


kor_str = " fiatal " i f kor < 18 e l s e " feln ő tt "
k_s = " gyerek " i f kor < 13 e l s e " fiatal " i f age < 18 e l s e " feln ő tt "

Ami megegyezik az alábbival:

i f kor < 18:


i f kor < 13:
p r i n t ( ’ gyerek ’)
else :
p r i n t ( ’ fiatal ’)
else :
p r i n t ( ’ feln ő tt ’)

Szkriptnyelvek 2018 Python Shorthandek 6 / 51


Shorthand
És és vagy kapcsolatok is segíthetnek rövidebb, szebb kód írásában
d e f get_name ():
feltetel = True
r e t u r n " Almas Pite " i f feltetel e l s e None

i f get_name ():
name = get_name ()
else :
name = " Anonymous "

Ugyanez rövidebben:
name = get_name () i f get_name () e l s e " Anonymous "

Ugyanez rövidebben:
name = get_name () o r " Anonymous "

p r i n t ( name )

Szkriptnyelvek 2018 Python Shorthandek 7 / 51


List comprehension
Listaképzés (egy meglévő listából új lista)
Egyszerűsített szintaxis meglévő lista elemein végzett műveletre,
szűrésre
Az eredeti lista nem változik meg
Eddigi megoldásunk:

regi_lista = [ elem1 , elem2 , elemn ]

uj_lista = l i s t ()
f o r lista_elem i n regi_lista :
uj_lista . append ( muvelet ( lista_elem ))

List comprehension használatával

regi_lista = [ elem1 , elem2 , elemn ]

uj_lista = [ muvelet ( lista_elem ) f o r lista_elem i n regi_lista ]

Szkriptnyelvek 2018 Python Shorthandek 8 / 51


List comprehension
l e h e t s e g e s _ j e l s z a v a k = [ " 1234 s56 " , " 12 n3 " , " a5sd " , " asdasdjsasd " ,
" h43uoi2hz$ " , " b " , " BbB " , " d " , " elkap " , " jelszo " , " teto " , " tkl4 " ,
" tak2 " , " gfsd$ " , " $$$alma$$$ " ]

b i z t o n s a g o s _ j e l s z a v a k = l i s t ()
f o r jelszo i n l e h e t s e g e s _ j e l s z a v a k :
b i z t o n s a g o s _ j e l s z a v a k . append ( jelszo . upper ())

p r i n t ( biztonsagos_jelszavak )

[ ’1234 S56 ’ , ’12 N3 ’ , ’ A5SD ’ , ’ ASDASDJSASD ’ , ’ H43UOI2HZ$ ’ , ’B ’ , ’BBB ’ , ’D ’ , ’ ELKAP ’ ,


’ JELSZO ’ , ’ TETO ’ , ’ TKL4 ’ , ’ TAK2 ’ , ’ GFSD$ ’ , ’ $$$ALMA$$$ ’]

b_jelszavak = [ jelszo . upper () f o r jelszo i n l e h e t s e g e s _ j e l s z a v a k ]

p r i n t ( b_jelszavak )

[ ’1234 S56 ’ , ’12 N3 ’ , ’ A5SD ’ , ’ ASDASDJSASD ’ , ’ H43UOI2HZ$ ’ , ’B ’ , ’BBB ’ , ’D ’ , ’ ELKAP ’ ,


’ JELSZO ’ , ’ TETO ’ , ’ TKL4 ’ , ’ TAK2 ’ , ’ GFSD$ ’ , ’ $$$ALMA$$$ ’]

Szkriptnyelvek 2018 Python Shorthandek 9 / 51


List comprehension

Ugyanez szűréssel egybekötve

regi_lista = [ elem1 , elem2 , elemn ]

uj_lista = l i s t ()
f o r lista_elem i n regi_lista :
i f feltetel ( lista_elem ):
uj_lista . append ( lista_elem )

List comprehension használatával

regi_lista = [ elem1 , elem2 , elemn ]

uj_lista = [ le f o r le i n regi_lista i f feltetel ( lista_elem )]

Szkriptnyelvek 2018 Python Shorthandek 10 / 51


List comprehension
l_jsz = [ " 1234 s56 " , " 12 n3 " , " a5sd " , " asdasdjsasd " ,
" h43uoi2hz " , " b " , " BbB " , " d " , " elkap " , " jelszo " , " teto " , " tkl4 " ,
" tak2 " , " gfsd " , " aaaaaaaaalma " ]

b i z t o n s a g o s _ j e l s z a v a k = l i s t ()
f o r jelszo i n l_jsz :
i f l e n ( jelszo ) > 6:
b i z t o n s a g o s _ j e l s z a v a k . append ( jelszo )

p r i n t ( biztonsagos_jelszavak )

[ ’1234 s56 ’ , ’ asdasdjsasd ’ , ’ h43uoi2hz ’ , ’ aaaaaaaaalma ’]

b_jelszavak = [ jelszo f o r jelszo i n l_jsz i f l e n ( jelszo ) > 6]

p r i n t ( b_jelszavak )

[ ’1234 s56 ’ , ’ asdasdjsasd ’ , ’ h43uoi2hz ’ , ’ aaaaaaaaalma ’]

Szkriptnyelvek 2018 Python Shorthandek 11 / 51


Listaképzés - példa

Mátrix transzponálása
 
1 2 3  
4 1 4 7 10
5 6
matrix =  matrix T = 2 5 8 11
   
7 8 9

3 6 9 12
10 11 12

matrix = [[1 , 2 , 3] , [4 , 5 , 6] , [7 , 8 , 9] , [10 , 11 , 12]]


hossza = r a n g e ( l e n ( matrix [0]))
matrix_t = [[ sor [ i ] f o r sor i n matrix ] f o r i i n hossza ]
p r i n t ( matrix_t )

[[1 , 4 , 7 , 10] , [2 , 5 , 8 , 11] , [3 , 6 , 9 , 12]]

Szkriptnyelvek 2018 Python Shorthandek 12 / 51


Listaképzés példa
szinek = [ " piros " , " k é k " , " z ö ld " , " s á rga " ]
dolgok = [ " h á z " , " aut ó " , " fa " ]
szines_dolgok = [ sz + " " + d f o r sz i n szinek f o r d i n dolgok ]
p r i n t ( szines_dolgok )

[ ’ piros h áz ’ , ’ piros aut ó ’, ’ piros fa ’ , ’k é k h áz ’ , ’k é k aut ó ’, ’k é k fa ’ , ’z ö ld h áz ’ ,


’z ö ld aut ó ’, ’z ö ld fa ’ , ’s á rga h áz ’ , ’s á rga aut ó ’, ’s á rga fa ’]

list_a = [1 , 2 , 3 , 4 , 6 , 7 , 8 , 9]
list_b = [2 , 3 , 4 , 5 , 8 , 9]

lkr = [ a f o r a i n list_a f o r b i n list_b i f a == b ]

p r i n t ( lkr )

[2 , 3 , 4 , 8 , 9]

Szkriptnyelvek 2018 Python Shorthandek 13 / 51


Tartalom

Shorthandek Dátum és idő


1 Python Parancssori paraméterek JSON kezelés
Beépített függvénykönyvtárak Véletlen generátor Egyebek

Szkriptnyelvek 2018 Python Parancssori paraméterek 14 / 51


Parancssori paraméterek

A parancssori paraméterek lekéréséhez be kell importálnunk a sys


modult.
A sys.argv változóban találhatjuk meg a parancssori paramétereket.
Ez egy szövegeket tartalmazó lista, a 0. argumentum a futtatott fájl
neve.
i m p o r t sys

p r i n t ( sys . argv )

python abc.py 1 2 3 4 5
[ ’ abc . py ’ , ’1 ’ , ’2 ’ , ’3 ’ , ’4 ’ , ’5 ’]

Persze ennek használata macerás lehet , konvertálás, stb..


Mi van akkor, ha nevesített kapcsolókat szeretnék? (pl.: python
tool.py -save -output abc.txt)
Szkriptnyelvek 2018 Python Parancssori paraméterek 15 / 51
argparse

Ilyen célra használhatjuk a beépített argparse nevű modult


Segítségével könnyedén kezelhetjük a parancssori paramétereket.
Az argparse modult kell használnunk, létre kell hoznunk egy
ArgumentParser példányt, ami elvégzi a parancssori paraméterek
megfelelő beolvasását.
Csak a --help kapcsoló működik alapesetben.

i m p o r t argparse
parser = argparse . A rgumentP arser ()
parser . parse_args ()

> python abc . py -- help


usage : abc . py [ - h ]

optional arguments :
-h , -- help show this help message and exit

Szkriptnyelvek 2018 Python Parancssori paraméterek 16 / 51


argparse

Ha létrehoztuk az ArgumentParser példányt, az add_argument


metódusával adhatunk hozzá parancssori paramétereket

i m p o r t argparse
parser = argparse . A rgumentP arser ()
parser . add_argument ( " echo " , h e l p = " Probald ki :) " )
args = parser . parse_args ()
p r i n t ( args . echo )

> python abc . py echo


echo
> python abc . py hellobello
hellobello

Szkriptnyelvek 2018 Python Parancssori paraméterek 17 / 51


argparse

type=<típus> segítségével megadhatjuk, hogy az adott paraméter


milyen típusú kell, hogy legyen.
dest="nev" segítéségével megadhatjuk, hogy az adott argumentum
milyen néven legyen a kész, argumentumokat tároló objektumban.

i m p o r t argparse
parser = argparse . A rgumentP arser ()
parser . add_argument ( " negyzet " , h e l p = " Negyzetre emeles " , t y p e = i n t )
args = parser . parse_args ()

p r i n t ( args . negyzet **2)

> python abc . py 5


25

> python abc . py 100


10000

Szkriptnyelvek 2018 Python Parancssori paraméterek 18 / 51


argparse

default=<érték> segítségével megadhatunk egy alapértelmezett


értéket, így opcionálissá téve az adott paramétert("-" vagy "- -"
karakterrel kell, hogy kezdődjön)

i m p o r t argparse
parser = argparse . A rgumentP arser ()
parser . add_argument ( " alap " , h e l p = " Negyzetre emeles alap " , t y p e = i n t )
parser . add_argument ( " - kitevo " , h e l p = " Negyzetre emeles kitevo " ,
t y p e = i n t , default =2)

args = parser . parse_args ()

p r i n t ( args . alap ** args . kitevo )

> python abc . py 9


81

> python abc . py 3 - kitevo 3


27

Szkriptnyelvek 2018 Python Parancssori paraméterek 19 / 51


argparse akciók
action="<akció>" segítéségével megadhatunk egy műveletet, ami
végrehajtódik.
store: a paraméter mentése egy változóba, ez az alapbeállítás
store_const: egy konstans érték tárolása a paraméterben, ha
megadjuk (az értéket a const paraméter megadásával kötelező
megadni)
store_true: Igaz érték mentése, ha megadjuk a paramétert
store_false: Hamis érték mentése, ha megadjuk a paramétert
append: egy létező listához hozzáfűzés
append_const: konstans érték listában való tárolása (több
paraméterre ugyanaz a dest van beállítva vagy egyazon paraméter
többszöri megadásakor a listába kerül)
count: a megadott kapcsolók darabszáma (pl.: verbose esetén hasznos
lehet)
version
Saját "akció" készítése: https://docs.python.org/3/library/
argparse.html#argparse.Action

Szkriptnyelvek 2018 Python Parancssori paraméterek 20 / 51


argparse
i m p o r t argparse
parser = argparse . A rgumentP arser ()
parser . add_argument ( " -v " , " -- verbose " , action = " store_true " )
args = parser . parse_args ()
p r i n t ( args . verbose )

> python abc . py


False

> python abc . py -v


True

i m p o r t argparse
parser = argparse . A rgumentP arser ()
parser . add_argument ( " -i " , " -- input - file " , action = " append " )
args = parser . parse_args ()
p r i n t ( args . input_file )

> python abc . py -i alma . txt -i korte . txt


[ ’ alma . txt ’ , ’ korte . txt ’]

Szkriptnyelvek 2018 Python Parancssori paraméterek 21 / 51


Tartalom

Shorthandek Dátum és idő


1 Python Parancssori paraméterek JSON kezelés
Beépített függvénykönyvtárak Véletlen generátor Egyebek

Szkriptnyelvek 2018 Python Véletlen generátor 22 / 51


Véletlen

choices=[]: segítségével egy lista elemei közül választhatunk

i m p o r t argparse

parser = argparse . A rgumentP arser ()


parser . add_argument ( " -j " , " -- jatekos " , h e l p = " Jatekos lepese " ,
choices =[ ’ ko ’ , ’ papir ’ , ’ ollo ’ ])
args = parser . parse_args ()
p r i n t ( args . jatekos )

> python abc . py -j ko


ko

> python abc . py -j fel


usage : abc . py [ - h ] [ - j { ko , papir , ollo }]
abc . py : error : argument -j / - - jatekos : invalid choice : ’fel ’ ( choose from ’ko ’ , ’ papir ’ ,
’ ollo ’)

Szkriptnyelvek 2018 Python Véletlen generátor 23 / 51


Véletlen
Ha véletlenül szükségünk lenne egy véletlenre, a random modul segít!
Importálás után már használhatjuk is (többek között) az alábbiakat:
randint(start, stop): start és stop között ad vissza egy
véletlenszerű elemet
random(): 0-1 közötti véletlenszerű lebegőpontos számot ad vissza.
choice(lista): kiválaszt egy véletlenszerű elemet a listából
shuffle(lista): egy lista elemeit összekeveri
>>> random . randint (0 , 10)
8
>>> random . randint (12 , 31)
30
>>> random . random ()
0.5408843812567276
>>> lista = [ " zokni " , " cipo " , " penztarca " , " kocsi kulcs " ]
>>> random . choice ( lista )
’ kocsi kulcs ’
>>> random . shuffle ( lista )
>>> p r i n t ( lista )
[ ’ kocsi kulcs ’ , ’ zokni ’ , ’ cipo ’ , ’ penztarca ’]

Szkriptnyelvek 2018 Python Véletlen generátor 24 / 51


Véletlen - Példa
Egészítsük ki a kő-papír-olló játékunkat!
i m p o r t argparse
i m p o r t random

L E H E T S E G E S _ L E P E S E K = [ ’ ko ’ , ’ papir ’ , ’ ollo ’]
parser = argparse . A rgumentP arser ()
parser . add_argument ( " -j " , " -- jatekos " , h e l p = " Jatekos lepese " ,
choices = L E H E T S E G E S _ L E P E S E K )
args = parser . parse_args ()

jatekos_lepes = args . jatekos


gepi_lepes = random . choice ( L E H E T S E G E S _ L E P E S E K )

p r i n t ( " J á t é kos : " , jatekos_lepes )


p r i n t ( " G é p : " , gepi_lepes )

# H á zi feladat b e f e j e z n i !

> python abc . py -j ko


J á t é kos : ko
G é p : ollo

Szkriptnyelvek 2018 Python Véletlen generátor 25 / 51


Számkitalálós játék
Egy egyszerű számkitalálós játék (alapja)
i m p o r t random

gondolt_szam = random . randint (0 , 50)


w h i l e True :
tipp = i n t ( i n p u t ( " Tipp ? " ))
i f tipp < gondolt_szam :
p r i n t ( " A gondolt szam nagyobb ! " )
e l i f tipp > gondolt_szam :
p r i n t ( " A gondolt szam kisebb ! " )
else :
p r i n t ( ’ Telitalalat ! ’)
break

> python abc . py


Tipp ? 12
A gondolt szam kisebb !
Tipp ? 5
A gondolt szam nagyobb !
Tipp ? 8
A gondolt szam nagyobb !
Tipp ? 9
Telitalalat !

Szkriptnyelvek 2018 Python Véletlen generátor 26 / 51


Tartalom

Shorthandek Dátum és idő


1 Python Parancssori paraméterek JSON kezelés
Beépített függvénykönyvtárak Véletlen generátor Egyebek

Szkriptnyelvek 2018 Python Dátum és idő 27 / 51


Idő- és dátumkezelés

Ha dátummal szeretnénk foglalkozni, a datetime modul importálása


szükséges
Itt találhatók a fontosabb műveletek időhöz, dátumhoz kapcsolódó
műveletek

>>> i m p o r t datetime
>>> datetime . datetime . now ()
datetime . datetime (2018 , 10 , 8 , 7 , 56 , 29 , 279143)
>>> most = datetime . datetime . now ()
>>> most . year
2018
>>> most . month
10
>>> most . day
8
>>> regen = datetime . datetime (2014 , 5 , 22)
>>> p r i n t ( regen )
2014 -05 -22 00:00:00

Szkriptnyelvek 2018 Python Dátum és idő 28 / 51


datetime
datetime.datetime(year, month, day[, hour[, minute[,
second[, microsecond[, tzinfo]]]]])
Dátumot és időt is tároló objektum
MINYEAR <= year <= MAXYEAR
1 <= month <= 12
1 <= day <= nap az adott év adott hónapjában
0 <= hour < 24
0 <= minute < 60
0 <= second < 60
0 <= microsecond < 1000000
datetime.date(year, month, day)
Dátumot tároló objektum
Fenti szabályok ide is érvényesek
date.strftime(format): Egy adott dátumot formázhatunk meg a
megadott formázó szöveggel
date.isoformat(): ISO formátumban tér vissza a dátummal
(date(2002, 12, 4).isoformat() == ’2002-12-04’)
Szkriptnyelvek 2018 Python Dátum és idő 29 / 51
datetime
datetime.timedelta([days[, seconds[, microseconds[,
milliseconds[, minutes[, hours[, weeks]]]]]]])
Két időpont közötti különbséget tárolja
date2 = date1 + timedelta
date2 = date1 - timedelta
timedelta = date1 - date2
datetime.time(hour=0, minute=0, second=0,
microsecond=0, tzinfo=None, *, fold=0)
Egy nap időpontját tárolja, függetlenül bármely naptól
Előzőleg említett szabályok itt is érvényesek
Mindegyik osztálynak van min és max attribútuma, ami a lehetséges
legkisebb dátumot/időt tartalmazza.
Bővebben:
https://docs.python.org/3/library/datetime.html

Szkriptnyelvek 2018 Python Dátum és idő 30 / 51


calendar
Naptárat is kérhetünk, ehhez a calendar modult kell importálni.
calendar.Calendar(firstweekday=0): Naptár létrehozása, a hét
első napjának megadása (0 - hétfő, 6 - vasárnap)
Leszármazott osztályok:
TextCalendar: szöveges naptár
HTMLCalendar: HTML-formázott naptár
LocaleTextCalendar
LocaleHTMLCalendar
i m p o r t calendar
i m p o r t datetime as dt

cal = calendar . month ( dt . datetime . now (). year , dt . datetime . now (). month )
p r i n t ( " Aktualis naptari honap : " )
p r i n t ( cal )

Aktualis naptari honap :


October 2018
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 Szkriptnyelvek 2018 Python Dátum és idő 31 / 51
time

Alacsonyabb szintű, idővel kapcsolatos műveleteket tároló modul


Az itt használható műveletek nagy része az adott platform C-beli
függvényeire támaszkodik.
time.time(): Epoch óta eltelt idővel tér vissza (másodpercben,
lebegőpontos)
time.time_ns() Ugyanaz, mint a time(), csak egész értékkel tér
vissza (eltelt nanomásodpercek)
time.monotonic(): Folyamatosan növekvő számmal tér vissza. Nem
befolyásolható a rendszer idejének módosításával.
time.monotonic_ns(): Ugyanaz, de egésszel tér vissza
time.localtime([secs]): Lokális idő struktúrával tér vissza
(epoch óta eltelt idő).

Szkriptnyelvek 2018 Python Dátum és idő 32 / 51


Időstruktúra

Index Név Érték


0 tm_year (például 1993)
1 tm_mon range [1, 12]
2 tm_mday range [1, 31]
3 tm_hour range [0, 23]
4 tm_min range [0, 59]
5 tm_sec range [0, 61]
6 tm_wday range [0, 6], hétfővel kezdődik
7 tm_yday range [1, 366]
8 tm_isdst 0, 1 or -1;
N/A tm_zone az időzóna neve
N/A tm_gmtoff offset

Szkriptnyelvek 2018 Python Dátum és idő 33 / 51


Példa
i m p o r t time
i m p o r t datetime as dt

most = dt . datetime . now ()


p r i n t ( " epoch ó ta eltelt id ő : " , time . time ())
p r i n t ( " Jelenlegi d á tum é s id ő : " , most )
p r i n t ( " M á s form á z á ssal : " , most . strftime ( " % Y .% m .% d . % H :% M " ))

ma = dt . date . today ()
p r i n t ( " Idei é v : " , ma . strftime ( " % Y " ))
p r i n t ( " Idei é v : " , ma . year )
p r i n t ( " Aktu á lis h ó nap : " , ma . strftime ( " % B " ))
p r i n t ( " Aktu á lis h é t az é vben : " , ma . strftime ( " % W " ))
p r i n t ( " A h é t napja : " , ma . strftime ( " % w " ))
p r i n t ( " Az é v aktu á lis napja : " , ma . strftime ( " % j " ))
p r i n t ( " A h ó nap aktu á lis napja : " , ma . day ) #
p r i n t ( " A h é t napja : " , ma . strftime ( " % A " ))

Szkriptnyelvek 2018 Python Dátum és idő 34 / 51


Példa - kimenet
epoch ó ta eltelt id ő : 1 538 98 122 3. 80 828 7
Jelenlegi d á tum é s id ő : 2018 -10 -08 08:47:03.808287
M á s form á z á ssal : 2018.10.08. 08:47
Idei é v : 2018
Idei é v : 2018
Aktu á lis h ó nap : October
Aktu á lis h é t az é vben : 41
A h é t napja : 1
Az é v aktu á lis napja : 281
A h ó nap aktu á lis napja : 8
A h é t napja : Monday

Bővebben:
https://docs.python.org/3/library/time.html
https://docs.python.org/3/library/datetime.html
https://docs.python.org/3/library/calendar.html

Szkriptnyelvek 2018 Python Dátum és idő 35 / 51


Tartalom

Shorthandek Dátum és idő


1 Python Parancssori paraméterek JSON kezelés
Beépített függvénykönyvtárak Véletlen generátor Egyebek

Szkriptnyelvek 2018 Python JSON kezelés 36 / 51


JSON kezelés
JSON: JavaScript Object Notation. Emberek számára is könnyen
olvasható, szöveges formátum
Alapvető adattípusok:
Szám
Szöveg, idézőjelek közötti unicode karakterek
Boolean (igaz vagy hamis)
Tömb (szögletes zárójelek közötti, vesszővel elválasztott értékek)
Objektum: kulcs-érték párok halmaza. Elválasztás a kettőspont
karakterrel, vesszővel elválasztva, a kulcsok minden esetben szövegek
üres
Pythonban is használhatjuk őket, a json modult kell beimportálni
>>> i m p o r t json
>>> json . dumps ( " repa " )
’" repa " ’
>>> json . dumps ({ " zoldsegek " : [ ’ repa ’ , ’ zeller ’ , ’ paprika ’ ]})
’ {" zoldsegek ": [" repa " , " zeller " , " paprika "]} ’
>>> json . loads ( ’ {" nev ": " Python Peter "} ’)
{ ’ nev ’: ’ Python Peter ’}

Szkriptnyelvek 2018 Python JSON kezelés 37 / 51


JSON kezelés - kiírás
json.dump(obj, fp, skipkeys=False, ensure_ascii=True,
check_circular=True, allow_nan=True, cls=None,
indent=None, separators=None, encoding="utf-8",
default=None, sort_keys=False, **kw)
Az adott objektumot JSONné alakítja. Az fp paraméterben megadott
fájlba fogja írni (fájlszerűség, ami támogatja a write műveletet).
skipkeys: nem alaptípusú kulcsok kihagyása
ensure_ascii: Unicode karakterek escape-elése
uXXXX szekvenciákká
check_circular: Körkörös hivatkozások ellenőrzése
allow_nan: nan, inf, -inf értékek engedélyezése
indent: output formázása, indentálási szint karakterekben megadva.
separators: szeparátorok megadása (elem_elválasztó,
kulcs_elválasztó) tuple formában
sort_keys: az eredményben kulcs szerinti rendezés
json.dumps(obj, skipkeys=False, ensure_ascii=True,
check_circular=True, allow_nan=True, cls=None,
indent=None, separators=None, encoding="utf-8",
default=None, sort_keys=False, **kw)
Szkriptnyelvek 2018 Python JSON kezelés 38 / 51
JSON kezelés - beolvasás
json.load(fp[, encoding[, cls[, object_hook[,
parse_float[, parse_int[, parse_constant[,
object_pairs_hook[, **kw]]]]]]]])
JSON-fájl beolvasása, és Python dictté alakítása.
json.loads(s[, encoding[, cls[, object_hook[,
parse_float[, parse_int[, parse_constant[,
object_pairs_hook[, **kw]]]]]]]])
JSON szöveg beolvasása és Python dictté alakítása
JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None
Szkriptnyelvek 2018 Python JSON kezelés 39 / 51
Példa
{
" colors " : [
{
" color " : " black " ,
" code " : {
" rgba " : [255 ,255 ,255 ,1] ,
" hex " : " #000 "
}
},
{
" color " : " red " ,
" code " : {
" rgba " : [255 ,0 ,0 ,1] ,
" hex " : " # FF0 "
}
}
]
}

Elérhető: https://pastebin.com/3MHEWWwR

Szkriptnyelvek 2018 Python JSON kezelés 40 / 51


Példa - JSON beolvasás
i m p o r t json

szinek = []
with open ( ’ adatok . json ’ , ’r ’) as fp :
szinek = json . load ( fp )
szinek = szinek [ " colors " ]

f o r szin i n szinek :
p r i n t ( szin [ " color " ])

hex_codes = [ szin [ " code " ]. get ( " hex " ) f o r szin i n szinek ]
p r i n t ( ’A hex kodok ’ , hex_codes )

black
white
red
blue
yellow
green
A hex kodok [ ’#000 ’ , ’# FFF ’ , ’# FF0 ’ , ’#00 F ’ , ’# FF0 ’ , ’#0 F0 ’]

Szkriptnyelvek 2018 Python JSON kezelés 41 / 51


Példa - JSON kiírás
i m p o r t json

adatok = d i c t ()
adatok [ " nev " ] = " Python Peter "
adatok [ " emails " ] = [ " hello@ppeti . hu " , " peter . p y t h o n @ m u n k a h e l y . hu " ]
adatok [ " skillek " ] = { " MS Word " : 10 , " MS Excel " : 9 , " Python " : 3 ,
" Java " : 1 , " C ++ " : None }

with open ( " adatok . json " , ’w ’) as fp :


json . dump ( adatok , fp , indent =2)

{
" nev ": " Python Peter " ,
" emails ": [
" hello@ppeti . hu " ,
" peter . p y thon@munk ahely . hu "
],
" skillek ": {
" MS Word ": 10 ,
" MS Excel ": 9 ,
" Python ": 3 ,
" Java ": 1 ,
" C ++": null
}
}

Szkriptnyelvek 2018 Python JSON kezelés 42 / 51


Tartalom

Shorthandek Dátum és idő


1 Python Parancssori paraméterek JSON kezelés
Beépített függvénykönyvtárak Véletlen generátor Egyebek

Szkriptnyelvek 2018 Python Egyebek 43 / 51


os

Operációs rendszer műveletekhez az os modult használhatjuk.


os.getcwd(): az aktuális könyvtár
os.path.XXXX: útvonallal kapcsolatos metódusok (pl.:
os.path.abspath(útvonal) abszolút útvonallá alakít)
os.listdir(mappa): egy adott mappa tartalmát listázza
os.rename(regi, uj): átnevezés (os.rename("regi.txt", "uj.txt"))
os.walk(top[, topdown=True[, onerror=None[,
followlinks=False]]]): mappaszerkezet bejárása
os.getenv(key, default=None): adott kulcsú környezeti változó
lekérése (default értéket megadhatunk arra az esetre, ha nem
található a kulcs)
os.getpid(): a futó folyamat azonosítója
os.chdir(mappa): mappaváltás
os.system(command): parancs futtatása
Szkriptnyelvek 2018 Python Egyebek 44 / 51
Példa

Mappaszerkezet bejárása

i m p o r t os

f o r root , dirs , files i n os . walk ( " g :\ cloudora " , topdown = False ):


f o r name i n files :
p r i n t ( os . path . join ( root , name ))
f o r name i n dirs :
p r i n t ( os . path . join ( root , name ))

g :\ cloudora \10 _federations . pdf


g :\ cloudora \1 _intro . pdf
g :\ cloudora \2 _grid . pdf
g :\ cloudora \3 _EGI . pdf
g :\ cloudora \4 _Virtualizacio . pdf
g :\ cloudora \5 _ C o mm e rc i a l_ C lo u d s . pdf
g :\ cloudora \6 _Azure . pdf
g :\ cloudora \7 _Academic_Clou ds . pdf
g :\ cloudora \8 _Adatfelhok . pdf
g :\ cloudora \9 _ i n t e r o p _ d a t a _ c l o u d . pdf
g :\ cloudora \ I n n o v a t i v _ f e l h o _ t e c h _ 2 0 1 5 . pdf

Szkriptnyelvek 2018 Python Egyebek 45 / 51


CSV

CSV kezeléshez segítséget nyújthat a csv modul


Bővebben: https://docs.python.org/3/library/csv.html

>>> i m p o r t csv
>>> with open ( ’ eggs . csv ’ , newline = ’ ’) as csvfile :
... spamreader = csv . reader ( csvfile , delimiter = ’ ’ ,
... quotechar = ’| ’)
... f o r row i n spamreader :
... p r i n t ( ’ , ’. join ( row ))
Spam , Spam , Spam , Spam , Spam , Baked Beans
Spam , Lovely Spam , Wonderful Spam

i m p o r t csv
with open ( ’ eggs . csv ’ , ’w ’ , newline = ’ ’) as csvfile :
spamwriter = csv . writer ( csvfile , delimiter = ’ ’ ,
quotechar = ’| ’ ,
quoting = csv . QUOTE_MINIMAL )
spamwriter . writerow ([ ’ Spam ’] * 5 + [ ’ Baked Beans ’ ])
spamwriter . writerow ([ ’ Spam ’ , ’ Lovely Spam ’ , ’ Wonderful Spam ’ ])

Szkriptnyelvek 2018 Python Egyebek 46 / 51


CSV -> dict
Nevesítve, szótárrá is alakíthatjuk a csv fájlokat, DictWriter és
DictReader segítségével
>>> i m p o r t csv
>>> with open ( ’ names . csv ’ , newline = ’ ’) as csvfile :
... reader = csv . DictReader ( csvfile )
... f o r row i n reader :
... p r i n t ( row [ ’ first_name ’] , row [ ’ last_name ’ ])
Eric Idle
John Cleese
>>> p r i n t ( row )
OrderedDict ([( ’ first_name ’ , ’ John ’) , ( ’ last_name ’ , ’ Cleese ’ )])

i m p o r t csv

with open ( ’ names . csv ’ , ’w ’ , newline = ’ ’) as csvfile :


fieldnames = [ ’ first_name ’ , ’ last_name ’]
writer = csv . DictWriter ( csvfile , fieldnames = fieldnames )

writer . writeheader ()
writer . writerow ({ ’ first_name ’: ’ Baked ’ , ’ last_name ’: ’ Beans ’ })

Szkriptnyelvek 2018 Python Egyebek 47 / 51


subprocess

Parancsok futtatására használható modul, a használatához a


subprocess modul szükséges.
A run metódus minden esetben egy CompletedProcess objektummal
tér vissza.1
i m p o r t subprocess

completed = subprocess . run ([ ’ ls ’ , ’ -1 ’ ])


p r i n t ( ’ returncode : ’ , completed . returncode )

completed = subprocess . run ( ’ echo ~ ’ , shell = True )

try :
subprocess . run ([ ’ false ’] , check = True )
e x c e p t subprocess . C a l l ed P r o c e s s E r r o r as err :
p r i n t ( ’ ERROR : ’ , err )

completed = subprocess . run ([ ’ ls ’ , ’ -1 ’] , stdout = subprocess . PIPE )


p r i n t ( completed . stdout )

1
https://docs.python.org/3/library/subprocess.html
Szkriptnyelvek 2018 Python Egyebek 48 / 51
URL letöltése

Importálnunk kell az urllibből a request almodult.

i m p o r t json
i m p o r t urllib . request

URL = " http :// www . mocky . io / v2 /5 b b b 2 a 1 a 3 1 0 0 0 0 7 0 0 0 1 4 8 e 8 2 "

response = urllib . request . urlopen ( URL )


valasz = response . read ()
adatok = json . loads ( valasz )

p r i n t ( adatok [ " nev " ])

Szkriptnyelvek 2018 Python Egyebek 49 / 51


Továbbiak
Rengeteg további beépítet modul található, például:
re (regex kezelés)
glob (mintaegyeztető fájlnevekre)
shutil (magas szintű fájlműveletek)
math (matematikai műveletek, konstansok)
statistics (statisztikai függvények)
logging (naplózás)
difflib (adat-összehasonlítás)
email (levelezés)
threading (párhuzamosítás)
tkinter (ablakos alkalmazások)
Ezen kívül számtalan külső függvénykönyvtár is rendelkezésünkre áll
Ám ezekre sajnos nem jut idő.

Szkriptnyelvek 2018 Python Egyebek 50 / 51


Köszönöm a figyelmet!

Szkriptnyelvek 2018 51 / 51

You might also like