11. Práce s textem — IB111 – Cvičebnice (2025)

11.1. Práce s textem

Pokročilá práce s řetězci

Čtení a zápis do souborů

Oficiální dokumentace

input_file = open("input.txt", "r") # otevreni souboru pro ctenicontent = input_file.read() # nacteni celeho obsahu souboru do retezcelines = input_file.readlines() # nacteni souboru souboru jako seznam radkuoutput_file = open("output.txt", "w") # otevreni souboru pro zapisoutput_file.write("Some sentence.") # zapis retezce do souborusome_file.close() # uzavreni souboru# doporucovana konstrukce with, ktera zajisti automaticke uzavreni souboru:with open("input.txt", "r") as input_file: pass

11.1.1. “head” / “tail”

Načtěte soubor alice-in-wonderland.txt anaprogramujte funkce:

  1. head, která vypište prvních n řádků obsahu souboru,

  2. tail, která vypište posledních n řádků obsahu souboru.

def head(filename: str, n: int) -> None: passhead("alice-in-wonderland.txt", 3)## ALICE’S ADVENTURES IN WONDERLAND#def tail(filename: str, n: int) -> None: passtail("alice-in-wonderland.txt", 3)# all their simple sorrows, and find a pleasure in all their simple joys,# remembering her own child-life, and the happy summer days.#

11.1.2. Každé druhé slovo

Načtěte soubor lorem-ipsum.txt avypište každé druhé slovo, které se vněm nachází.

def every_second(filename: str) -> None: passevery_second("lorem-ipsum.txt")# ipsum sit consectetur elit, do tempor ut et magna Rhoncus purus# enim Risus tristique aliquet. in quam orci eu Scelerisque imperdiet# fermentum vel porta

11.1.3. Nejčastější slova

Načtěte soubor sherlock-holmes.txt avypište 10 nejčastěji se vyskytujících slov vtextu. Pro zajímavost se omeztepouze na slova délky 3 a více.

def most_freq_words(filename: str) -> None: passmost_freq_words('sherlock-holmes.txt')

11.1.4. Průměrný počet slov ve větě

Analyzujte text vsouborualice-in-wonderland.txt a vraťteprůměrný počet slov ve větě.

def average_sentence_len(filename: str) -> float: passprint(average_sentence_len('alice-in-wonderland.txt'))

11.1.5. Frekvence písmen

Proveďte frekvenční analýzu některého zvýše uvedených souborů. Vypište,kolikrát se vtextu vyskytují jednotlivá písmena.

Tip: pro ověření, že je daný znak písmeno, můžete použít funkci isalpha.

def freq_analysis(filename: str) -> None: passfreq_analysis('my_file.txt')

11.1.6. Podmíněná frekvenční analýza

Pro každé písmeno vtextu vypište 5 písmen, které za ním následují nejčastěji.Můžete využít například soubordevatero_pohadek.txt.

def cond_freq_analysis(filename: str) -> None: passcond_freq_analysis('devatero_pohadek.txt')

11.1.7. Imitace textu

Napište funkci text_imitation(filename, length), která analyzuje textvsouboru filename. Funkce pak vygeneruje pseudo-náhodný text olengthslovech. Text se generuje po slovech. Další generované slovo se náhodně vybíráztěch, které vpůvodním textu po naposledy vygenerovaném slově následovaly.

def text_imitation(filename: str, length: int) -> None: passtext_imitation('devatero_pohadek.txt', 10)

11.1.8. Imitace textu po písmenech

Upravte vaše předchozí řešení tak, aby vytvářelo slova a to po jednotlivýchpísmenech.

11.1.9. Analýza jmen

Načtěte soubor jmena.csv. Implementujte funkcimost_common_names(filename), která ze souboru vypíše count nejčastějiužívaných jmen (globálně).

def most_common_names(filename: str, count: int) -> None: passmost_common_names('jmena.csv', 10)

11.1.10. Analýza jmen II

Upravte předchozí funkci tak, aby jako parametr brala ještě seznam roků. Funkcevypíše count nejčastějších jmen vletech, které dostane vseznamu.

def most_common_names_years(filename: str, count: int, years: List[int]) -> None: passmost_common_names_years('jmena.csv', 10, [2005, 1996, 2003])

11.1.11. Zpracování jmen

Napište funkce, která přečte všechny jména v souboruNAMES.txt, zpracuje je tak, aby měla velké pouzeprvní počáteční písmeno (JOHN -> John) a seřadí je v abecedě. Po té je uložído jiného souboru.

def process_names(input_filename: str, output_filename: str) -> None: passprocess_names('NAMES.txt', 'names.txt')

11.2. Regulární výrazy

11. Práce s textem — IB111 – Cvičebnice (1)

Regulární výraz (regular expression), označovaný též zkráceně jakoregexp či regex je speciální řetězec znaků, který představuje určitývzor pro textové řetězce. Regulární výraz je tedy nějaký obecný popis,který vždy odpovídá určité skupině řetězců (např.: email, html tag,datum…). Můžeme je využít ke kontrole vstupu, hledání a nahrazování vtextu, parsování html a mnoha dalším úkolům.

O regulárních výrazech bylo mnoho napsánu a existuje mnoho návodů a taháků:regularnivyrazy.info,python.org,Wikipedia,Cheat Sheet,OverAPI a další.Existují i weby, kde si lze práci s regulárními výrazy snadno vyzkoušetonline (např.: pythex.org). Můžete je taképrocvičit na Tutorovi.

Pro práci s regulárními výrazy v Pythonu lze využít knihovnu re

Raw string

Protože zpětná lomítka mají speciální význam také v regulárních výrazech(a tedy jich obvykle obsahují hodně), vyhovovalo by nám více takové chování,kdy by se zpětná lomítka v řetězci nijak neinterpretovala.Toho lze dosáhnout přidáním znaku r těsně před samotný řetězec, např. r’rawstring with ‘.

11.2.1. Celá čísla

Napište funkci is_integer(string), která vrátí True pokud zadanýstring je celé číslo.

import redef is_integer(string: str) -> bool: passdef test_is_integer() -> None: assert is_integer("42") == True assert is_integer("-42") == True assert is_integer("4a2") == False

11.2.2. Čísla

Napište funkci is_number(string), která vrátí True pokud zadanýstring je číslo.

import redef is_number(string: str) -> bool: passdef test_is_number() -> None: assert is_number("42.01") == True assert is_number("-42") == True assert is_number("4.b") == False assert is_number("42.") == False

11.2.3. Jména

Využijte soubor jmen, které jste vytvořili ve cvičeníZpracování jmen. Funkce search_in_file(pattern, filename)vypíše z daného souboru všechny řádky, které odpovídají vzoru. Pomocí tétofunkce vypište všechny jména která

  1. obsahují oo

  2. obsahují alespoň 3 znaky o (ne nutně po hned sobě)

  3. obsahují pouze samohlásky

  4. obsahují pouze souhlásky [stačí přidat jediný znak do předchozího vzoru]

  5. začínají na B nebo D a končí na w nebo z

  6. obsahují buď inf nebo rec

  7. kromě prvního a posledního písmene obsahují pouze samohlásky a mají přesně 5 písmen

  8. začínají a končí na A a mají nejvýše 4 písmena

  9. začínají na N nebo M a obsahují alespoň 5 samohlásek

  10. kromě a můžou obsahovat nejvýše 2 jiná písmena, což ale můžou být jediněl, m nebo n

# vypise radky, ktere splnuji zadany vzordef search_in_file(pattern: str, file_name: str) -> None: with open(file_name) as f: lines = f.read().split('\n') # nacteme vsechny radky do seznamu for line in lines: # prochazime radky a hledame shodu if re.search(pattern, line): print(line)search_in_file(r'.*', 'names.txt')

11.2.4. Zpracování CSV

Ze souboru students.csv vypište následujícístatistiky:

  1. seznam všech křestních jmen

  2. seznam všech použitých křestních jmen (bez opakování) s počtem jejich výskytů

  3. seznam všech použitých křestních jmen s počtem jejich výskytů začínajícídaným písmenem

  4. řaďte jména podle abecedy

  5. pro každého člověka informaci o studovaném semestru v následujícím formátu:50668: 1. semestr 1. rocniku, 43583 : 5. semestr 1 cyklu

  6. další informace (třeba rozložení mezi fakultami)

names("students.csv", "s")# Samuel 3# Sandra 1# Sebastian 1semesters("students.csv")# 50668 : 1. semestr 1 rocniku# 421714: 2. semestr 1 rocniku# 564138: 1. semestr 1 rocniku# 43583 : 5. semestr 1 cyklu# 81908 : 5. semestr 1 cyklu# 844632: 1. semestr 1 rocniku# 798639: 1. semestr 1 rocniku# ....
11. Práce s textem — IB111 – Cvičebnice (2025)

References

Top Articles
Latest Posts
Recommended Articles
Article information

Author: Tyson Zemlak

Last Updated:

Views: 5231

Rating: 4.2 / 5 (43 voted)

Reviews: 82% of readers found this page helpful

Author information

Name: Tyson Zemlak

Birthday: 1992-03-17

Address: Apt. 662 96191 Quigley Dam, Kubview, MA 42013

Phone: +441678032891

Job: Community-Services Orchestrator

Hobby: Coffee roasting, Calligraphy, Metalworking, Fashion, Vehicle restoration, Shopping, Photography

Introduction: My name is Tyson Zemlak, I am a excited, light, sparkling, super, open, fair, magnificent person who loves writing and wants to share my knowledge and understanding with you.