reseni.py 1.46 KB
Newer Older
cermak's avatar
cermak committed
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# %%

# Spočítejte, kolik je v souboru řádků, slov a viditelných znaků (tedy bez mezer a konců řádků)

with open("lipsum.txt", encoding="utf-8") as f:
    radku = slov = znaku = 0
    for line in f:
        radku += 1
        for s in line.split():
            slov += 1
            znaku += len(s)
print(f"Soubor má {radku} řádků, {slov} slov a {znaku} tisknutelných znaků.")


# %%
# Zkopíruje soubor do jiného souboru, aby řádky šly v opačném pořadí

# 1) hloupý postup, který načte původní soubor do paměti

with open("lipsum.txt", encoding="utf-8") as f:
    lines = f.readlines()
with open("lipsum-back.txt", mode="w", encoding="utf-8") as f:
    for line in reversed(lines):
        


# %%
# 2) chytrý postup, který čte soubor odzadu, využívá externí knihovnu 
# to samé by si šlo naprogramovat pomocí seeku, ale proč když už to někdo udělal.reversed

from file_read_backwards import FileReadBackwards

with FileReadBackwards("lipsum.txt", encoding="utf-8") as frb:
    with open("lipsum-back.txt", mode="w", encoding="utf-8") as f:
        for line in frb:
            f.write(line + "\n")


# %%
# Najděte na každém řádku všechna čísla (oddělená mezerami) a vypíše jejich součet; slova, která nejsou čísly, ignoruje.

def safe_int(s):
    try:
        return int(s)
    except ValueError:
        return 0

with open("lipsum.txt", encoding="utf-8") as f:
    for line in f:
        print(sum(map(safe_int, line.split())))