Práce s řetězci a se soubory
Podívejme se v rychlosti, jak Python pracuje s řetězci a se soubory. Ukážeme si základní principy a jednoduché příklady.
Řetězce -- Python str¶
S řetězci jsme se už setkali mnohokrát, řekli jsme si také, že str
objekt je immutable (neměnitelný). V rychlosti teď shrneme základy.
print("řetězce jsou ve dvojitých")
print('nebo jednoduchých uvozovkách, tj. " nebo \'')
print('řetězce spojíme ' + 'operátorem +')
print('+ můžeme případně vynechat, '
'takže dlouhé řetězce můžeme rozložit'
'do více řádků, nejlépe uvnitř závorek')
Python podporuje unicode:
print("Τὴ γλῶσσα μοῦ ἔδωσαν ἑλληνικὴ")
# pokud chceme psát spoustu speciálních znaků, např. \, použijeme r" ..."
# to se hodí třeba pro LaTeX
print(r"\[\frac{{\partial \psi }}{{\partial R}}\]")
s = "řřeettěězzccee ppooddppoorruujjíí řřeezzyy"
print(s[::2])
s = "řetězce lze " + 3 * "násobit "
print(s)
name = "Eric"
age = 74
f"Hello, {name}. You are {age}."
f"2 * 37 = {2 * 37}"
Můžeme volat i metody / funce:
name = "Eric Idle"
f"{name.lower()} is funny."
Výrazy se dají formátovat pomocí formátovacího mini-jazyka:
import decimal
value = decimal.Decimal("12.34567")
width = 10
precision = 4
f"result: {value:{width}.{precision}}"
import datetime as dt
today = dt.date.today()
f"Taday is {today:%B %d, %Y}"
Existují ještě dva starší (zastaralé) způsoby formátování: pomocí %
operátoru a pomocí format
metody. Doporučení je používat už jen f-strings, případně string.Template
. Viz např. https://realpython.com/python-string-formatting/#which-string-formatting-method-should-you-use.
Metody třídy str
¶
Výpis "veřejných" metod str
, k němuž použijeme join
pro vytvoření řetězce z iterátoru a startswith
pro test začátku řetězce.
", ".join([m for m in dir("") if not m.startswith("_")])
Mezery apod. ořízneme pomocí strip
.
s = " \t abc\n\n"
print(s)
print(s.strip())
Často se hodí split, je to vlastně opak join.
s = "1, 2, 3, čtyři, 5"
# rozdílema na částí oddělené čárkou
s = s.split(",")
print(s)
# zkusíme převést na čísla
s = [int(a) for a in s if a.strip().isdigit()]
print(s)
Velikost písmen mění upper
, lower
, capitalize
, swapcase
print("všechna písmena velká".upper())
Základy práce se soubory¶
Pro práci se sounory je základní příkaz open
, který vrací instanci file
f = open("./150_prace-s-retezci-a-se-soubory.ipynb", "r")
print(f)
# metody file
", ".join([m for m in dir(f) if not m.startswith("_")])
# teď soubor zavřeme
f.close()
Nejčastější je procházet soubor jako iterátor.
f = open("./150_prace-s-retezci-a-se-soubory.ipynb", "r")
# print first 10 lines with line numbers and max 20 characters per line
for count, line in enumerate(f):
print(f"{count}: {line[:20].rstrip()}")
if count == 10:
break
f.close()
Pro práci se soubory je velice užitečný (a jednoznačně preferevaný) blok with
, který používá tzv. context managery. To nám zajistí, že soubor bude vždy zavřen, i když během práce se souborem dojde k chybě (neodchycená výjimka). Nahrazuje to tak try..except..finally
blok.
Použití je velice jednoduché, předchozí příklad by vypadal takto:
with open("./150_prace-s-retezci-a-se-soubory.ipynb", "r") as f:
# print first 10 lines with line numbers and max 20 characters per line
for count, line in enumerate(f):
print(f"{count}: {line[:20].rstrip()}")
if count == 10:
break
Všimněte si, že chybí explicitní volání f.close()
.
Komentáře
Comments powered by Disqus