Lekce 7 Práce se soubory Práce se soubory. Zpracování textových souborů C2184 Úvod do programování v Pythonu podzim 2016 Práce se soubory Stanislav Geidl 1» C21B4 do programová Soubory Práce se soubory v Pythonu Práce s textovými soubory Příklady Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita 7.1 Soubory • soubor je sada informací uložených pod konkrétním jménem na datovém médiu, např. soubor Iecture07.pdf uložený na vašem pevném disku • rozdělení souborů na O textové soubory obsahují informace uložené čitelné textové podobě, kterou můžeme jednoduše uložit do typu string, příkladem může být formát molekul mol, mol2 nebo pdb, některé výstupy z programů, ... © binární soubory obsahují informace uložené pro nás v nečitelné podobě sekvenci bytu, jedná se o zkompilované programy, obrázky, videa, ... Práce se soubory Stanislav Geidl C21B4 Úvod do programování Práce se soubory v Pythonu Práce s textovými soubory Příklady 7.2 Open, read, write, close • otevření souboru open (name, mode), módy: (r1, r+2, w3 a4, t5, b6) • čtení dat v souboru read • zápis dat do souboru write • uzavření souboru close filehandler = open("test.txt", »r») data = filehandler.read() filehandler.close() 1 read = pro čtení, pokud soubor neexistuje nastane výjimka lOError 2pro čtení a zápis, pokud soubor neexistuje nastane výjimka lOError 3write = pro zápis, stávající soubor bude přepsán, v opačném případě se soubor vytvoří 4append = pro zápis na konec souboru, pokud soubor neexistuje nastane výjimka lOError 5textový formát souboru, defaultní volba 6byte = binární formát souboru Použití with • konstrukce with provede automatické uzavření souboru with open("test.txt", »r») as filehandler: data = filehandler.read() Práce se soubory Stanislav Geidl C21B4 Úvod do programování Práce s textovými soubory Příklady 7.4 Na co si dát pozor! Práce se soubory Stanislav Geidl C2184 do programování v Pythony kódování souboru (UTF-8, ISO-8895-2, Windows 1250 neboli CP1250) • funkce Unicode a encode zakončení konce řádků (Windows \r\n vs. UNIX\n) • funkce strip a rstrip Soubory Práce se soubory v Pythonu Práce s textovými soubory Příklady 7.5 Funkce readlines, readline Práce se soubory Stanislav Geidl • funkce readlines přečte celý soubor a řádky uloží do listu • funkce readline přečte jeden řádek • čtení celého souboru po řádcích pomocí cyklu f or: with open("test.txt", "r") as filehandler: for line in filehandler: print(line) • tento způsob je pro zpracování rozsáhlých souborů nejlepší, do paměti nenhrajeme v jeden okamžik celý soubor, ale pracuje s ním po částech (řádcích) C21B4 do programová Soubory Práce se soubory v Pythonu 5ráce s textovými soubory Příklady 7.6 Funkce seek a tell Práce se soubory Stanislav Geidl funkce seek (position) nastaví pozici (position) ukazatele v souboru funkce telí () nám řekne aktuální pozici v souboru Soubory Práce se soubory v Pythonu Práce s textovými soubory Příklady 7.7 Příklad I Práce se soubory Stanislav Geidl V souboru cisla.txt nahraďte středníky (;) za tabulátory (\t) a přidejte slopeček jež bude výsledkem: slouped +sloupec2-sloupec3 Požadovaný výstup: 17 4.2 30 21 4.0 32 23 3.6 57 20 3.8 48 18 4.7 70 -8 . 8 -7 . 0 -30 . 4 -24.2 -47 . 3 C21B4 do programová Soubory Práce se soubory v Pythonu Práce s textovými soubory Příklady 7.8 Příklad I - řešení numberfile2 = open("cisla2.txt","w") with open("cisla.txt") as numberfile: for line in numberfile: xl, x2, x3 = line.stripO .split (";") x4 = float(xl) + float(x2) - float(x3) line = line.rstrip().replace (";","\t") + numberfile2.write(line + str(x4) + "\n") numberfile2.close() Práce se soubory Stanislav Geidl C2184 Soubory Práce se soubory v Pythonu Práce s textovými soubory 7.9 Příklad I - řešení (obecněji) Práce se soubory Stanislav Geidl numberfile2 = open("cisla2.txt ',"w") with open("cisla.txt") as numberfile: for line in numberfile: line = line.stripO numbers = line.split ( ) """ numbers = [float (x) for x in numbers] for i in range(len(numbers)): numbers[i] = float(numbers[i]) numbers.append(numbers[0]+numbers[1]-numbers[2]) nnn numbers = [str(x) for x in numbers] for i in range(len(numbers)): numbers[i] = str(numbers[i]) numberfile2.write(1 .join(numbers)+ ') numberfile2.close() C2184 Úvod do programování Soubory Práce se soubory v „ „ „ Pythonu Práce s textovými soubory Příklady ff tf tf 7.10 Příklad II Práce se soubory Stanislav Geidl Vytvořte souboru cisla3.txt, který bude na bude navíc obsahovat součty sloupečků. Požadovaný výstup: 17 21 23 20 18 99 4 4 3 3 4 2; 30 0; 32 6; 57 8; 48 7; 70 0;20.3;237.0 C2184 Úvod do programování Soubory Práce se soubory v Pythonu Práce s textovými soubory Příklady 7.11 Příklad I - řešení numberfile3 = open("cisla3.txt","w") sums = [0,0,0] with open("cisla.txt") as numberfile: for line in numberfile: line = line.stripO numbers = line.split (';') for i in range(3): sums[i] += float(numbers[i]) numberfile3.write(line+'\n') numberfile3.write('{};{};{}\n'.format( sums[0],sums[ 1 ] ,sums[2])) numberfile3.close() Práce se soubory Stanislav Geidl ».'"""it'".. 1» C21B4 Úvod do prograrnovár Soubory Práce se soubory v Pythonu Práce s textovými soubory Příklady 7.12