Kako izvlečem določene dele besedilne datoteke z uporabo Pythona?

Pridobivanje besedila iz datoteke je pogosta naloga pri skriptiranju in programiranju, Python pa olajša. V tem priročniku bomo razpravljali o nekaterih preprostih načinih za izločanje besedila iz datoteke s programskim jezikom Python 3.

V tem priročniku bomo uporabljali Python različico 3. Večina sistemov je že nameščena s Python 2.7. Medtem ko se Python 2.7 uporablja v večini podedovanih kod, je Python 3 sedanjost in prihodnost jezika Python. Če nimate posebnega razloga za pisanje ali podporo starejše kode Python, vam priporočamo, da delate v Python 3.

Za Microsoft Windows lahko Python3 prenesete s spletnega mesta www.python.org. Ko nameščate, preverite, ali sta izbrani možnosti »Namesti zaganjalnik za vse uporabnike« in »Dodaj Python v PATH«, kot je prikazano na spodnji sliki.

V Linuxu lahko namestite Python 3 z upraviteljem paketov. Na primer, v Debian ali Ubuntu ga lahko namestite z ukazom:

 sudo apt-get update && sudo apt-get namestite python3 

Za macOS lahko namestitveni program Python 3 prenesete s python.org, kot je povezano zgoraj. Če uporabljate upravljalnik paketov Homebrew, ga lahko namestite tudi tako, da odprete okno terminala ( AplikacijePripomočki ) in izvedete ta ukaz:

 pivo namestite python3 

Teče Python

V Linuxu in macOSu je ukaz za zagon interpretatorja Python 3 python3 . V sistemu Windows, če ste namestili zaganjalnik, je ukaz py . Ukazi na tej strani uporabljajo python3 ; če ste v sistemu Windows, nadomestite py za python3 v vseh ukazih.

Z zagonom Pythona brez možnosti se bo začel interaktivni tolmač. Za več informacij o uporabi prevajalnika glejte Pregled Pythona: z uporabo tolmača Python. Če pomotoma vnesete tolmača, ga lahko zapustite z ukazom exit () ali quit () .

Z izvajanjem Pythona z imenom datoteke bo ta program Python interpretiran. Na primer:

 python3 program.py 

... zažene program, ki je v datoteki program.py .

Ok, kako lahko uporabimo Python, da izvlečemo besedilo iz besedilne datoteke?

Branje podatkov iz besedilne datoteke

Najprej preberite besedilno datoteko. Recimo, da delamo z datoteko z imenom lorem.txt, ki vsebuje nekaj vrstic latinice:

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nec maximus purus. Maecenas sit amet pretium tellus. 

Quisque pri dignissim lacus.

Opomba: V vseh primerih, ki sledijo, delamo z besedilom v tej datoteki. Prosto kopirajte in prilepite latinično besedilo zgoraj v besedilno datoteko in ga shranite kot lorem.txt, tako da lahko zaženete primer kode z uporabo te datoteke kot vnosa.

Python program lahko bere besedilno datoteko z vgrajeno funkcijo open () . Spodaj je na primer program Python 3, ki odpre lorem.txt za branje v besedilnem načinu, prebere vsebino v nizsko spremenljivko, imenovano vsebina, zapre datoteko in nato natisne podatke.

 myfile = open ("lorem.txt", "rt") # odprto lorem.txt za branje besedila content = myfile.read () # preberi celotno datoteko v niz myfile.close () # zapri datoteko print (vsebina) # print content 

Tukaj je myfile ime, ki ga podajamo našem datotečnemu objektu.

Parameter " rt " v funkciji open () pomeni "odpiramo to datoteko, da ne bomo prenesli podatkov"

Oznaka razpršitve (" # ") pomeni, da je vse ostalo na tej vrstici komentar in ga Pythonov tolmač prezre.

Če program shranite v datoteko read.py, jo lahko zaženete z naslednjim ukazom.

 python3 read.py 

Zgornji ukaz prikaže vsebino lorem.txt :

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nec maximus purus. Maecenas sit amet pretium tellus. 

Quisque pri dignissim lacus.

Uporaba »z odprto«

Pomembno je, da čim prej zaprete odprte datoteke: odprite datoteko, izvedite operacijo in jo zaprite. Ne puščajte odprtega za daljše časovno obdobje.

Ko delate z datotekami, je dobra praksa, da uporabite odprti ... kot sestavljeni stavek. To je najčistejši način za odpiranje datoteke, delovanje na njej in zaprtje datoteke, vse v eni enostaven za branje bloka kode. Datoteka se samodejno zapre, ko se zaključi kodni blok.

Uporaba z odprto ... kot, lahko ponovno napišemo naš program, da izgleda takole:

 z odprto ('lorem.txt', 'rt') kot myfile: # Odpri lorem.txt za branje besedila content = myfile.read () # Preberi celotno datoteko v nizu (vsebina) # Natisni niz 

Opomba: Zamikanje je pomembno v Pythonu. Python programi uporabljajo bel prostor na začetku vrstice, da opredelijo obseg, kot je blok kode. Priporočljivo je, da uporabite štirje presledki na ravni zamika in da uporabite presledke namesto zavihkov. V naslednjih primerih se prepričajte, da je koda vstavljena točno tako, kot je prikazana tukaj.

Shranite program kot read.py in ga izvedite:

 python3 read.py 

Izhod

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nec maximus purus. Maecenas sit amet pretium tellus. 

Quisque pri dignissim lacus.

Branje besedilnih datotek po vrsticah

V dosedanjih primerih smo v celotni datoteki brali takoj. Branje polne datoteke ni veliko vprašanje z majhnimi datotekami, toda na splošno to ni dobra ideja. Če je datoteka večja od količine razpoložljivega pomnilnika, boste naleteli na napako.

V skoraj vsakem primeru je boljša ideja, da se besedilna datoteka bere eno vrstico naenkrat.

V Pythonu je datotečni objekt iterator. Iterator je vrsta predmeta Python, ki se ob večkratnem delovanju obnaša na določene načine. Na primer, lahko uporabite zanko for za večkratno delovanje na datotečnem predmetu in vsakič, ko se izvede ista operacija, boste prejeli drugačen ali »naslednji« rezultat.

Za besedilne datoteke objekt predmeta datoteko ponovi po eni vrstici besedila. V eni vrstici besedila obravnava "enoto" podatkov, tako da lahko uporabimo ukaz za ... v zanki, ki ponavlja podatke o eni vrstici naenkrat:

 z odprto ('lorem.txt', 'rt') kot myfile: # Odprite datoteko lorem.txt za branje besedila za myline v myfile: # Za vsako vrstico, jo preberete v niz (print) (myline) # print that string, ponovite 

Izhod

 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dn maximus purus. Maecenas sit amet pretium tellus. Quisque pri dignissim lacus. 

Opazimo, da dobivamo dodatni prelom vrstice ("newline") za vsako vrstico. To je zato, ker sta natisnjeni dve vrstici. Prva je nova vrstica na koncu vsake vrstice naše besedilne datoteke. Druga nova vrstica se zgodi, ker privzeto print () doda lastno prelom vrstice na koncu tistega, kar ste ga zahtevali za tiskanje.

Shranimo svoje vrstice besedila v spremenljivko - specifično spremenljivko seznama -, da jo lahko natančneje pogledamo.

Shranjevanje besedilnih podatkov v spremenljivko seznama

V Pythonu so seznami podobni nizu v C ali Java, vendar ne enaki. Seznam Python vsebuje indeksirane podatke različnih dolžin in tipov.

 mylines = [] # Razglasi prazen seznam z imenom mylines. z odprto ('lorem.txt', 'rt') kot myfile: # Odprite lorem.txt za branje besedilnih podatkov. za myline v myfile: # Za vsako vrstico, shranjeno kot myline, mylines.append (myline) # doda njeno vsebino v mylines. print (mylines) # Natisnite seznam. 

Rezultat tega programa je nekoliko drugačen. Namesto tiskanja vsebine seznama ta program natisne naš seznamni predmet, ki izgleda takole:

Izhod

 ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. N ', ' Mauris nec maximus purus. \ T Maecenas sit amet pretium tellus. Preesent sed rhoncus eo. N ', "Quisque pri dignissim lacus. \ T 

Tukaj vidimo surovo vsebino seznama. V obliki surovega predmeta je seznam predstavljen kot seznam z ločenimi vejicami. Tukaj je vsak element predstavljen kot niz, in vsak nov vrstica je predstavljena kot zaporedje ubežnih znakov, \ t

Podobno kot matrika v C ali Java, lahko dostopamo do elementov seznama tako, da pod imenom spremenljivke podamo indeksno številko v oklepajih. Indeksne številke se začnejo z ničlo - druge besede, n- ti element seznama ima numerični indeks n -1.

Opomba: Če se sprašujete, zakaj se številke indeksov začnejo na nič, namesto na eni, niste sami. Računalniški znanstveniki so v preteklosti razpravljali o uporabnosti ničelnih sistemov oštevilčenja. Leta 1982 je Edsger Dijkstra podal svoje mnenje o tej temi in pojasnil, zakaj je ničelno oštevilčenje najboljši način za indeksiranje podatkov v računalništvu. Beležko si lahko preberete sami - pravi prepričljiv argument.

Prvi element vrstic lahko natisnemo tako, da navedemo indeksno številko 0, ki je v oklepaju za imenom seznama:

 print (mylines [0]) 

Izhod

 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla arcu congue metus aliquam mollis. 

Ali tretjo vrstico z navedbo indeksnega števila 2:

 print (mylines [2]) 

Izhod

 Quisque pri dignissim lacus. 

Če pa poskusimo dostopati do indeksa, za katerega ni vrednosti, dobimo napako:

 print (mylines [3]) 

Izhod

 Sledenje (zadnje zadnje klicanje): datoteka, vrstica, tisk (mylines [3]) IndexError: seznam indeksov izven območja 

Objekt seznama je iterator, tako da lahko za tiskanje vsakega elementa seznama z njim preberemo za ... v :

 mylines = [] # Razglasi prazen seznam z odprto ('lorem.txt', 'rt') kot myfile: # Odpri lorem.txt za branje besedila. za vrstico v moji datoteki: # Za vsako vrstico besedila mylines.append (vrstica) # doda to vrstico na seznam. za element v mylines: # Za vsak element v seznamu, print (element) # natisni. 

Izhod

 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dn maximus purus. Maecenas sit amet pretium tellus. Quisque pri dignissim lacus. 

Ampak še vedno dobivamo nove vrstice. Vsaka vrstica naše besedilne datoteke se konča z znakom za novo vrstico ('' n ''), ki se natisne. Tudi po tiskanju vsake vrstice print () doda lastno novo vrstico, razen če ji pove, da to stori drugače.

To privzeto obnašanje lahko spremenimo tako, da v našem klicu print () določimo končni parameter:

 natisni (element, konec = '') 

Če nastavite konec na prazen niz (predstavljen kot dva enojna narekovaja, brez presledka med), povejmo print (), da namesto znaka za novo vrstico natisne nič na koncu vrstice.

Naš spremenjeni program izgleda takole:

 mylines = [] # Razglasi prazen seznam z odprto ('lorem.txt', 'rt') kot myfile: # Odpri datoteko lorem.txt za branje besedila za vrstico v moji datoteki: # Za vsako vrstico besedila, mylines.append ( vrstico) # dodajte to vrstico na seznam. za element v mylines: # Za vsak element v seznamu, print (element , end = '' ) # natisni , brez dodatnih vrstic . 

Izhod

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nec maximus purus. Maecenas sit amet pretium tellus. 

Quisque pri dignissim lacus.

Nova vrstica, ki jo vidite tukaj, sta dejansko v datoteki; oni so poseben znak ('' n '') na koncu vsake vrstice. Tega se želimo znebiti, zato nam ni treba skrbeti zanje, medtem ko obdelujemo datoteko.

Kako odstraniti nove vrstice

Če želite popolnoma odstraniti nove vrstice, jih lahko odstranimo. Če želite odstraniti niz, morate odstraniti enega ali več znakov, običajno presledek, iz začetka ali konca niza.

Nasvet: Ta proces se včasih imenuje tudi "obrezovanje".

Python 3 string objekti imajo metodo, imenovano rstrip (), ki izloči znake z desne strani niza. Angleški jezik se glasi od leve proti desni, zato odstranjevanje z desne strani odstrani znake od konca.

Če se spremenljivka imenuje mistring, lahko njeno desno stran odstranimo z mystring.rstrip ( chars ), kjer je ukazna vrstica niz znakov, ki jih je treba odstraniti, če so na desni strani niza. Na primer, "123abc" .rstrip ("bc") vrne 123a .

Nasvet: Ko v svojem programu predstavljate niz z literalnimi vsebinami, se imenuje string literal. V Pythonu (kot v večini programskih jezikov) so literalni literati vedno citirani - na obeh straneh so zajeti z enojnimi (') ali dvojnimi (") kotacijami. V Pythonu so enojni in dvojni narekovaji enakovredni, lahko uporabite enega ali drugega, dokler se ujemata na obeh koncih niza, običajno je, da v dvojnih narekovajih ( "Hello" ) predstavljate niz, ki ga je mogoče prebrati s človeka (npr. Hello ). ali en poseben znak, kot je znak za novo vrstico (), je običajno, da uporabite enojne narekovaje ( 'b', ' ' '' ). Za več informacij o uporabi nizov v Pythonu lahko preberete dokumentacijo nizov v Pythonu.

Stavek string .rstrip ('' '') bo odstranil znak za novo vrstico z desne strani niza . Naslednja različica našega programa premakne nove vrstice, ko je vsaka vrstica prebrana iz besedilne datoteke:

 mylines = [] # Razglasi prazen seznam. z odprto ('lorem.txt', 'rt') kot myfile: # Odprite lorem.txt za branje besedila. za myline v myfile: # Za vsako vrstico v datoteki, mylines.append (myline.rstrip ('n')) # strip newline in add to list. za element v mylines: # Za vsak element v seznamu, print (element) # natisni. 

Besedilo je zdaj shranjeno v spremenljivki seznama, tako da je do posameznih vrstic mogoče dostopati s številko indeksa. Newline je bil odstranjen, zato nam ni treba skrbeti zanje. Vedno jih lahko pozneje vrnemo, če obnovimo datoteko in jo zapišemo na disk.

Zdaj pa poiščimo vrstice na seznamu za določen podniz.

Recimo, da želimo najti vsak pojav določene fraze ali celo eno samo črko. Na primer, morda moramo vedeti, kje je vsak "e". To lahko dosežemo z metodo find () .

Seznam shrani vsako vrstico našega besedila kot predmet niza. Vsi objekti niza imajo metodo, find (), ki najde prvo pojavitev podnizov v nizu.

Uporabimo metodo find () za iskanje črke "e" v prvi vrstici naše besedilne datoteke, ki je shranjena na seznamu mylines . Prvi element mylines je niz predmet, ki vsebuje prvo vrstico besedilne datoteke. Ta niz predmetov ima metodo find () .

V oklepajih find () podajamo parametre. Prvi in ​​edini zahtevani parameter je niz za iskanje, "e" . Stavek mylines [0] .find ("e") pove tolmaču, da začne na začetku niza in išče naprej, en znak naenkrat, dokler ne najde črke "e." Ko ga najde, preneha iskati in vrne indeksno številko, kjer se nahaja "e". Če doseže konec niza, vrne -1, da ne bi našel ničesar.

 print (mylines [0] .find ("e")) 

Izhod

3

Vrnjena vrednost "3" nam pove, da je črka "e" četrti znak, "e" v "Lorem". (Ne pozabite, da je indeks zasnovan na ničli: indeks 0 je prvi znak, 1 je drugi, itd.)

Metoda find () ima dva neobvezna, dodatna parametra: začetni indeks in indeks zaustavitve, kar kaže, kje v nizu se mora začeti in končati iskanje. Na primer, niz .find ("abc", 10, 20) bo iskal podniz "abc", vendar le od 11. do 21. znaka. Če stop ni določen, se bo find () začel ob začetku indeksa in se ustavil na koncu niza.

Na primer, naslednja izjava išče "e" v mišicah [0], začenši s petim znakom.

 print (mylines [0] .find ("e", 4)) 

Izhod

 24 

Z drugimi besedami, s petim znakom v vrstici [0] se prvi "e" nahaja na indeksu 24 ("e" v "dn").

Če želite začeti iskati po indeksu 10 in se ustaviti na indeksu 30:

 print (mylines [1] .find ("e", 10, 30)) 

Izhod

 28 

(Prvi "e" v "Meceni").

Če find () ne najde podniza v iskalnem območju, se vrne številka -1, kar kaže na neuspeh:

 print (mylines [0] .find ("e", 25, 30)) 

Izhod

-1

Med indeksi 25 in 30 ni bilo pojava "e".

Iskanje vseh pojavitev podnizov

Kaj pa, če želimo najti vsako pojavitev podnage, ne samo prvega, s katerim se srečujemo? Prečkamo lahko niz, začenši z indeksom prejšnjega ujemanja.

V tem primeru bomo uporabili zanko while za večkratno iskanje črke "e". Ko se najde dogodek, ponovno pokličemo find, začenši z nove lokacije v nizu. Natančneje, lokacija zadnjega dogodka, plus dolžina niza (tako da lahko premaknemo naprej mimo zadnjega). Ko find vrne -1 ali indeks začetka preseže dolžino niza, se ustavimo.

 # Zgradite mylines, kot je prikazano zgoraj, mylines = [] # Razglasi prazen seznam. z odprto ('lorem.txt', 'rt') kot myfile: # Odprite lorem.txt za branje besedila. za myline v myfile: # Za vsako vrstico v datoteki, mylines.append (myline.rstrip ('n')) # strip newline in add to list. # Poiščite in natisnite vse pojavne črke "e" index = 0 # trenutni indeks prev = 0 # prejšnji indeks str = mylines [0] # niz za iskanje (prvi element mylines) substr = "e" # podniz za iskanje medtem ko je indeks = len (str)) print ('n' + str); # Natisnite izvirni niz pod oznakama e 

Izhod

 eeeee Lorem ipsum dolor sit amet, consectetur adipiscing elit. ee Nunc fringilla arcu congue metus aliquam mollis. 

Vključevanje regularnih izrazov

Pri kompleksnih iskanjih morate uporabljati regularne izraze.

Modul regularnih izrazov Python se imenuje re . Če ga želite uporabiti v programu, uvozite modul, preden ga uporabite:

 uvoz ponovno 

Modul re uporablja regularne izraze tako, da prevede vzorec iskanja v objekt vzorca. Metode tega objekta se lahko nato uporabijo za izvedbo operacij ujemanja.

Na primer, recimo, da želite poiskati katero koli besedo v dokumentu, ki se začne s črko d in se konča v črki r . To lahko dosežemo z regularnim izrazom " bd w * r b ". Kaj to pomeni?

zaporedje znakovpomena
bMeja besede se ujema s praznim nizom (nič, vključno z ničemer), vendar le, če se prikaže pred ali za ne-besednim znakom. "Znaki besed" so številke od 0 do 9, male črke in velike črke ali podčrtaj (" _ ").
dSpodnja črka d .
w *w pomeni katerikoli besedni znak in * je kvantifikator, ki pomeni "nič ali več prejšnjega znaka." Tako se bo w * ujemal z ničlo ali več besednimi znaki.
rMala črka r .
bBeseda meja.

Ta regularni izraz se bo ujemal z vsakim nizom, ki ga lahko opišemo kot "mejo besed, nato z malimi črkami" d ", nato z ničnimi ali več besednimi znaki, nato z malimi črkami" r ", nato z mejo besed." strune, ki jih je mogoče opisati, vključujejo besede rušilec, pogum in zdravnik ter kratico dr .

Če želite uporabiti ta regularni izraz v Pythonovih iskalnih operacijah, ga najprej prevedemo v objekt vzorca. Naslednji stavek Python ustvari na primer vzorec vzorec vzorec, ki ga lahko uporabimo za izvajanje iskanja s tem regularnim izrazom.

 pattern = re.compile (r "bd w * r b") 

Opomba: Pomembna je črka r pred našim nizom v zgornji izjavi. Pripoveduje Pythonu, da naš niz interpretira kot surovi niz, natančno tako, kot smo ga vnesli. Če nismo predponi nizu z r, bi Python interpretiral ubežne sekvence, kot je npr. Kadarkoli potrebujete Python za dobesedno tolmačenje vaših nizov, ga podajte kot neobdelan niz tako, da ga določite z r .

Zdaj lahko uporabimo metode vzorčnega objekta, kot je iskanje () za iskanje niza za prevedeni regularni izraz, ki išče ujemanje. Če jo najde, bo vrnil poseben rezultat, imenovan objekt ujemanja. V nasprotnem primeru vrne None, vgrajeno Pythonovo konstanto, ki se uporablja kot boolova vrednost "false".

Primer

 import re str = "Dobro jutro, zdravnik." pat = re.compile (r "bd w * r b") # compile regex "bd w * r b" za objekt vzorca, če je pat.search (str)! vzorec. Če ga najdete, natisnite (»Najdeno«). 

Izhod

 Našel sem. 

Če želite izvesti iskanje, ki ni občutljivo na velike črke, lahko v koraku prevajanja podate posebno konstanto re.IGNORECASE :

 import re str = "Pozdravljeni, DoctoR." pat = re.compile (r "bd w * r b", re.IGNORECASE) # zgornje in male črke se ujemata, če je pat.search (str)! = None: print ("Najdeno.") 

Izhod

 Našel sem. 

Vse skupaj

Zdaj vemo, kako odpreti datoteko, prebrati vrstice v seznam in poiskati podniz v katerem koli elementu tega seznama. Uporabimo to znanje za izdelavo nekaterih primerov programov.

Natisnite vse vrstice, ki vsebujejo podniz

Spodnji program prebere vrstico po vrstico. Če vrstica vsebuje besedo »napaka«, se doda na seznam z napakami . Če ne, se ne upošteva. Metoda string () niz pretvori vse nizove v male črke za namene primerjave, zaradi česar neobčutljivost na velikost iskanja ne spreminja izvirnih nizov.

Upoštevajte, da je metoda find () klicana neposredno na rezultat nižje () metode; to se imenuje verižna metoda . Upoštevajte tudi, da v stavku print () izdelamo izhodni niz tako, da združimo več nizov z operatorjem + .

 errors = [] # Seznam, kjer bomo shranjevali rezultate. linenum = 0 substr = "error" .lower () # Podnapis za iskanje. z odprto ("logfile.txt", "rt") kot myfile: za vrstico v myfile: linenum + = 1, če line.lower (). find (substr)! = -1: # če se ne ujema z velikimi in malimi črkami, napake. append ("Linija" + str (linenum) + ":" + line.rstrip ("\ t 

Izhod

 Vrstica 6: Mar 28 09:10:37 Napaka: ne morem stopiti v stik s strežnikom. Povezava zavrnjena. Vrstica 10: Mar 28 10:28:15 Napaka v jedru: Navedena lokacija ni nameščena. Vrstica 14: Mar 28 11:06:30 NAPAKA: usb 1-1: ne more nastaviti konfiguracije, zapušča. 

Izvlecite vse vrstice, ki vsebujejo podniz, z uporabo regexa

Spodnji program je podoben zgornjemu programu, vendar uporablja modul za redne izraze. Napake in številke vrstic so shranjeni kot zaporedje, npr. (Linenum, line). Nabor se ustvari z dodatnimi oklepaji v stavku errors.append () . Elementi zapore so podobni seznamu, pri čemer je v oklepajih indeks na ničli. Kot je konstruirano tukaj, je err [0] linenum in err [1] je povezana vrstica, ki vsebuje napako.

 import re errors = [] linenum = 0 vzorec = re.compile ("napaka", re.IGNORECASE) # Sestavite regex, ki ne upošteva velikih in velikih črk, z odprto ('logfile.txt', 'rt') kot datoteko myfile: za vrstico v datoteki myfile : linenum + = 1, če je vzorec.search (line)! = None: # Če je najdeno ujemanje errors.append ((linenum, line.rstrip ('n'))) za napake v napakah: # Ponovite seznam odpisov ("Line" + str (err [0]) + ":" + err [1]) 

Izhod (enako kot zgoraj)

 Vrstica 6: Mar 28 09:10:37 Napaka: ne morem stopiti v stik s strežnikom. Povezava zavrnjena. Vrstica 10: Mar 28 10:28:15 Napaka v jedru: Navedena lokacija ni nameščena. Vrstica 14: Mar 28 11:06:30 NAPAKA: usb 1-1: ne more nastaviti konfiguracije, zapušča. 

Izvlecite vse vrstice, ki vsebujejo telefonsko številko

Spodnji program natisne vsako vrstico besedilne datoteke info.txt, ki vsebuje ameriško ali mednarodno telefonsko številko. To doseže z regularnim izrazom " (d {1, 2})? [S .-]? \ T Ta izraz se ujema z naslednjimi zapisi telefonskih številk:

  • 123-456-7890
  • (123) 456-7890
  • 123 456 7890
  • 123.456.7890
  • +91 (123) 456-7890
 import re errors = [] linenum = 0 vzorec = re.compile (r "(+ d {1, 2})? [s .-]? \ t {4} ") z odprto (" info.txt ", " rt ") kot myfile: za vrstico v datoteki myfile: linenum + = 1, če pattern.search (line)! = None: # Če iskanje vzorca najde ujemanje, napake .append ((linenum, line.rstrip ('' '')) za napake v napakah: print ("Line", str (err [0]), ":" + err [1]) 

Izhod

 Vrstica 3: Moja telefonska številka je 731.215.8881. Vrstica 7: Lahko pridete do g. Waltersja na (212) 558-3131. Vrstica 12: Njegova agentka, ga. Kennedy, je dosegljiva na +12 (123) 456-7890 Line 14: Lahko jo kontaktirate tudi na (888) 312.8403, podaljšek 12. 

Iščite v slovarju za besede

Spodnji program išče slovar za vse besede, ki se začnejo s h in končajo v pe . Za vnos uporablja slovarsko datoteko, ki je vključena v veliko sistemov Unix, / usr / share / dict / words .

 import re filename = "/ usr / share / dict / words" vzorec = re.compile (r "w * pe $", re.IGNORECASE) z odprto (ime datoteke, "rt") kot myfile: za vrstico v myfile: if pattern.search (line)! = None: print (line, end = '') 

Izhod

 Hope heliotrope upanje hornpipe horoskop hype