Kā var izvilkt konkrētas teksta faila daļas, izmantojot Python?

Teksta izvilkšana no faila ir kopīgs uzdevums skriptu un programmēšanas jomā, un Python padara to viegli. Šajā rokasgrāmatā mēs apspriedīsim dažus vienkāršus veidus, kā iegūt tekstu no faila, izmantojot Python 3 programmēšanas valodu.

Šajā rokasgrāmatā mēs izmantosim Python 3. versiju. Lielākā daļa sistēmu ir iepriekš instalētas ar Python 2.7. Lai gan Python 2.7 tiek izmantots lielākajā daļā mantoto kodu, Python 3 ir Python valodas tagadne un nākotne. Ja vien jums nav konkrēta iemesla rakstīt vai atbalstīt mantoto Python kodu, iesakām strādāt Python 3.

Microsoft Windows operētājsistēmai Python3 var lejupielādēt no http://www.python.org. Uzstādot, pārliecinieties, ka ir pārbaudītas opcijas "Instalēt palaidēju visiem lietotājiem" un "Pievienot Python uz PATH", kā parādīts attēlā.

Linux sistēmā jūs varat instalēt Python 3 ar savu pakotņu pārvaldnieku. Piemēram, Debian vai Ubuntu varat to instalēt ar komandu:

 sudo apt-get update & & sudo apt-get instalēt python3 

MacOS gadījumā Python 3 instalētājs var tikt lejupielādēts no python.org, kā minēts iepriekš. Ja izmantojat Homebrew pakotņu pārvaldnieku, to var instalēt arī, atverot termināļa logu ( lietojumprogrammasUtilities ) un palaižot šo komandu:

 brūvēt instalēt python3 

Python darbināšana

Linux un macOS, Python 3 tulka palaišanas komanda ir python3 . Operētājsistēmā Windows, ja instalējāt palaidēju, komanda ir py . Šīs lapas komandas izmanto python3 ; ja atrodaties sistēmā Windows, visos komandos aizstājiet py for python3 .

Python palaišana bez opcijām sāk interaktīvo tulku. Plašāku informāciju par tulka lietošanu skatiet Python pārskats: izmantojot Python tulku. Ja nejauši ievadāt tulku, varat iziet no tā, izmantojot komandu izeju () vai iziet () .

Python darbināšana ar faila nosaukumu interpretēs šo python programmu. Piemēram:

 python3 program.py 

... vada programmu, kas atrodas failā program.py .

Labi, kā mēs varam izmantot Python, lai iegūtu tekstu no teksta faila?

Datu lasīšana no teksta faila

Pirmkārt, lasīsim teksta failu. Pieņemsim, ka mēs strādājam ar failu lorem.txt, kas satur dažas latīņu rindas:

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nekad nav maksimums purus. Maecenas sit amet pretium tellus. 

Quisque pie dignissim lacus.

Piezīme. Visos turpmākajos piemēros mēs strādājam ar šajā failā iekļauto tekstu. Jūtieties brīvi kopēt un ielīmēt latīņu tekstu teksta failā un saglabāt to kā lorem.txt, lai jūs varētu palaist piemēru kodu, izmantojot šo failu kā ievadi.

Python programma var lasīt teksta failu, izmantojot iebūvēto atvērto () funkciju. Piemēram, zemāk ir programma Python 3, kas atver lorem.txt teksta lasīšanai, lasa saturu virknes mainīgajā nosaukumā, aizver failu un pēc tam izdrukā datus.

 myfile = open ("lorem.txt", "rt") # atvērt lorem.txt teksta satura lasīšanai = myfile.read () # lasīt visu failu virknē myfile.close () # aizveriet faila izdruku (saturu) # drukas saturs 

Šeit myfile ir nosaukums, ko mēs piešķiram mūsu faila objektam.

Funkcija " rt " atvērtajā () funkcijā nozīmē "mēs atveram šo failu r ead t ext datiem"

Hash zīme (" # ") nozīmē, ka viss pārējā šīs līnijas daļā ir komentārs, un Python tulks to ignorē.

Ja šo programmu saglabājat failā ar nosaukumu read.py, to var palaist ar šādu komandu.

 python3 read.py 

Iepriekš minētā komanda izsniedz lorem.txt saturu:

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nekad nav maksimums purus. Maecenas sit amet pretium tellus. 

Quisque pie dignissim lacus.

Izmantojot "ar atvērtu"

Ir svarīgi pēc iespējas ātrāk aizvērt atvērtos failus: atveriet failu, veiciet darbību un aizveriet to. Neatstājiet to atvērtu ilgāku laiku.

Strādājot ar failiem, tā ir laba prakse, lai izmantotu ar atvērtu ... saliktu paziņojumu. Tas ir tīrākais veids, kā atvērt failu, darboties ar to un aizvērt failu, viss vienā viegli lasāmā koda blokā. Kad kods ir pabeigts, fails tiek automātiski aizvērts.

Izmantojot atvērto ... , mēs varam pārrakstīt mūsu programmu, lai izskatītos šādi:

 ar atvērtu ('lorem.txt', 'rt') kā myfile: # Atveriet lorem.txt teksta satura lasīšanai = myfile.read () # Lasīt visu failu virknes drukā (saturs) # Drukāt virkni 

Piezīme. Python ir svarīga. Python programmās līnijas sākumā tiek izmantota baltā telpa, lai definētu darbības jomu, piemēram, koda bloku. Ieteicams izmantot četras atstarpes katrai ievilkuma pakāpei un izmantot atstarpes, nevis cilnes. Turpmākajos piemēros pārliecinieties, vai jūsu kods ir ievietots tieši tā, kā tas parādīts šeit.

Saglabājiet programmu kā read.py un izpildiet to:

 python3 read.py 

Izeja

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nekad nav maksimums purus. Maecenas sit amet pretium tellus. 

Quisque pie dignissim lacus.

Teksta failu lasīšana pa rindām

Līdzšinējos piemēros mēs esam izlasījuši visu failu vienlaicīgi. Pilna faila lasīšana nav liels risinājums ar maziem failiem, bet kopumā tas nav lieliska ideja. Pirmkārt, ja jūsu fails ir lielāks par pieejamās atmiņas apjomu, jums radīsies kļūda.

Gandrīz katrā gadījumā ir labāka ideja lasīt teksta failu vienā rindā.

Python faila objekts ir iterators. Iterators ir Python objekta veids, kas uzvedas vairākos veidos, kad darbojas atkārtoti. Piemēram, varat izmantot cilpu, lai atkārtoti darbotos faila objektā, un katru reizi, kad tiek veikta viena darbība, jūs saņemsiet citu vai nākamo rezultātu.

Teksta failiem faila objekts vienā reizē atkārto vienu teksta rindu. Tā uzskata, ka viena teksta rinda ir datu vienība, tāpēc mēs varam izmantot apzīmējumu ... in loop”, lai pa vienai rindiņai vienādotu datus:

 ar atvērtu ('lorem.txt', 'rt') kā myfile: # Atveriet failu lorem.txt, lai lasītu tekstu myline failā myfile: # Katrai rindai izlasiet to virknes drukā (myline) # drukāt šo virkni, atkārtojiet 

Izeja

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

Ņemiet vērā, ka pēc katras rindas mēs saņemam papildu rindas pārtraukumu ("newline"). Tas ir tāpēc, ka tiek drukātas divas jaunās rindas. Pirmais ir jaunā līnija mūsu teksta faila katras rindas beigās. Otrā jaunā līnija notiek tāpēc, ka pēc noklusējuma drukāšana () pievieno savu rindu rindu pēc tā, ko esat lūguši drukāt.

Saglabāsim teksta rindas mainīgajā - konkrēti, saraksta mainīgajā -, lai mēs varētu to apskatīt ciešāk.

Teksta datu saglabāšana saraksta mainīgajā

Python saraksti ir līdzīgi, bet ne tādi paši kā masīvs C vai Java. Python sarakstā ir indeksēti dati ar dažāda garuma un tipiem.

 mylines = [] # Atzīst tukšu sarakstu ar nosaukumu mylines. ar atvērtu ('lorem.txt', 'rt') kā myfile: # Atveriet lorem.txt teksta datu nolasīšanai. Myline failā myfile: # Katrai rindai, kas saglabāta kā Myline, mylines.append (myline) # pievieno tās saturu mylines. print (mylines) # Drukāt sarakstu. 

Šīs programmas rezultāti ir nedaudz atšķirīgi. Tā vietā, lai izdrukātu saraksta saturu, šī programma izdrukā mūsu saraksta objektu, kas izskatās šādi:

Izeja

 ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla arcu congue gada aliquam mollis. \ T Maecenas sit amet pretium tellus. Praesents sed rhoncus eo. Duis id commodo orci. ", " Quisque at dignissim lacus. \ T 

Šeit mēs redzam saraksta neapstrādāto saturu. Savā neapstrādātā objekta formā saraksts tiek attēlots kā komatu atdalīts saraksts. Šeit katrs elements tiek attēlots kā virkne, un katra jaunā līnija tiek attēlota kā tā glābšanas rakstzīmju secība, n .

Līdzīgi kā masīvs C vai Java, mēs varam piekļūt saraksta elementiem, norādot indeksa numuru pēc mainīgā nosaukuma iekavās. Indeksa numuri sākas ar nulli - citiem vārdiem sakot, saraksta n elementam ir skaitliskais indekss n -1.

Piezīme. Ja domājat, kāpēc indeksa numuri sākas no nulles, nevis viens, jūs neesat viens. Datorzinātnieki ir diskutējuši par nulles balstītu numerācijas sistēmu lietderību pagātnē. 1982. gadā Edsger Dijkstra sniedza savu atzinumu par šo tēmu, paskaidrojot, kāpēc nulles numerācija ir labākais veids, kā indeksēt datus datorzinātnēs. Piezīmi var izlasīt pats - viņš sniedz pārliecinošu argumentu.

Pirmo rindu elementu var izdrukāt, norādot indeksu numuru 0, kas atrodas iekavās pēc saraksta nosaukuma:

 drukāt (mylines [0]) 

Izeja

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

Vai trešā rinda, norādot indeksa numuru 2:

 drukāt (mylines [2]) 

Izeja

 Quisque pie dignissim lacus. 

Bet, ja mēs cenšamies piekļūt indeksam, kuram nav vērtības, mēs saņemam kļūdu:

 drukāt (mylines [3]) 

Izeja

 Traceback (pēdējais zvans pēdējais): fails, līnija, drukātā veidā (mylines [3]) IndexError: saraksta indekss ir ārpus diapazona 

Saraksta objekts ir iterators, tāpēc, lai izdrukātu katru saraksta elementu, mēs to varam atkārtot, izmantojot ...

 mylines = [] # Norādiet tukšu sarakstu ar atvērtu ('lorem.txt', 'rt') kā myfile: # Atveriet lorem.txt teksta lasīšanai. rindai Myfile: # Katrai teksta rindai mylines.append (line) # pievienojiet šo rindu sarakstam. elementam mylines: # Par katru elementa elementu drukāt (elementu) # drukāt to. 

Izeja

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

Bet mēs joprojām saņemam papildu rindas. Katra mūsu teksta faila rinda beidzas ar jaunu rindiņu (' n '), kas tiek drukāta. Arī pēc katras līnijas drukāšanas drukājiet () pievieno jaunu rindiņu, ja vien jūs to nedrīkstat darīt citādi.

Mēs varam mainīt šo noklusējuma darbību, norādot beigu parametru mūsu drukāšanas () zvanā:

 drukāt (elements, beigas = '') 

Iestatot beigas uz tukšu virkni (kas attēlota kā divas atsevišķas pēdiņas, bez atstarpes), mēs drukājam () izdrukāt neko līnijas beigās, nevis rindas rakstzīmes vietā.

Mūsu pārskatītā programma izskatās šādi:

 mylines = [] # Atzīstiet tukšu sarakstu ar atvērtu ('lorem.txt', 'rt') kā myfile: # Atveriet failu lorem.txt, lai lasītu tekstu rindai Myfile: # Katrai teksta rindai mylines.append ( rinda) # pievienot šo rindu sarakstam. elementam mylines: # Par katru elementa elementu drukāt (elementu , end = '' ) # drukāt to bez papildu rindām . 

Izeja

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nekad nav maksimums purus. Maecenas sit amet pretium tellus. 

Quisque pie dignissim lacus.

Šeit redzamās rindas faktiski atrodas failā; katras līnijas beigās viņi ir īpašs raksturs ('' '). Mēs vēlamies no tiem atbrīvoties, tāpēc mums nav jāuztraucas par tiem, kamēr mēs apstrādājam failu.

Kā atdalīt jaunās līnijas

Lai pilnībā noņemtu jaunās līnijas, mēs varam tos noņemt. Lai atceltu virkni, ir jānoņem viena vai vairākas rakstzīmes, parasti atstarpes no virknes sākuma vai beigām.

Padoms. Šo procesu dažreiz sauc arī par "apgriešanu".

Python 3 virknes objektiem ir metode, ko sauc par rstrip (), kas svītro rakstzīmes no virknes labās puses. Angļu valoda skan no kreisās uz labo pusi, tāpēc noņemšana no labās puses noņem rakstzīmes no gala.

Ja mainīgais ir nosaukts par Mystring, mēs varam izvilkt tās labo pusi ar mystring.rstrip ( chars ), kur simboli ir rakstzīmju virkne, lai sloksnētu, ja tie atrodas virknes labajā pusē. Piemēram, "123abc" .rstrip ("bc") atgriež 123a .

Padoms. Ja jūs attēlojat virkni savā programmā ar tās burtisko saturu, to sauc par virknes literālo. Python (tāpat kā lielākajā daļā programmēšanas valodu) stīgu literāli vienmēr tiek citēti - abās pusēs - ar vienu (") vai dubultu (") pēdiņām. Python vienreizējās un dubultās pēdiņas ir līdzvērtīgas, jūs varat izmantot vienu vai otru, tik ilgi, kamēr tie atbilst abiem virknes galiem, tas ir tradicionāls, lai attēlotu cilvēka lasāmu virkni (piemēram, Hello ) divkāršās pēdiņās ( "Hello" ) .Ja jūs pārstāvat vienu rakstzīmi (piemēram, b ), vai viena īpaša rakstzīme, piemēram, rindas rakstzīme ( n ), tā ir tradicionāla, lai izmantotu atsevišķas pēdiņas ( 'b', 'n' ). Lai iegūtu vairāk informācijas par to, kā izmantot virknes Python, varat izlasīt virknes virkni Python.

Paziņojuma virkne .rstrip ('n') no rindas labās puses noņems jaunu rindiņu . Turpmākā mūsu programmas versija noņem jaunās rindas, kad katra teksta rinda tiek lasīta no teksta faila:

 mylines = [] # Norāda tukšu sarakstu. ar atvērtu ('lorem.txt', 'rt') kā myfile: # Atveriet lorem.txt teksta lasīšanai. Myline failā myfile: # Katrai faila rindiņai mylines.append (myline.rstrip ('' ')) # sloksnes rindiņa un pievienošana sarakstam. elementam mylines: # Par katru elementa elementu drukāt (elementu) # drukāt to. 

Teksts tagad tiek saglabāts saraksta mainīgajā, tāpēc atsevišķas līnijas var piekļūt pēc indeksa numura. Jaunas līnijas ir noņemtas, tāpēc mums par tām nav jāuztraucas. Mēs vienmēr varam tos atpakaļ vēlāk, ja mēs atjaunojam failu un uzrakstām to uz diska.

Tagad meklējiet saraksta rindas konkrētai apakšpozīcijai.

Pieņemsim, ka mēs vēlamies atrast katru konkrētu frāzi vai pat vienu burtu. Piemēram, varbūt mums ir jāzina, kur ir "e". To mēs varam paveikt, izmantojot virknes meklēšanas () metodi.

Sarakstā tiek saglabāta katra teksta rinda kā virknes objekts. Visiem virknes objektiem ir metode, atradīsiet (), kas atrod virkni pirmajā apakšpozīcijā.

Izmantosim atrast () metodi, lai meklētu burtu "e" mūsu teksta faila pirmajā rindā, kas tiek saglabāta sarakstā mylines . Mylines pirmais elements ir virknes objekts, kas satur teksta faila pirmo rindu. Šim virknes objektam ir atrast () metode.

Atrast () iekavās mēs norādām parametrus. Pirmais un vienīgais nepieciešamais parametrs ir virkne, kas jāmeklē, "e" . Paziņojums mylines [0] .find ("e") stāsta tulka sākumam virknes sākumā un meklēšanu uz priekšu, vienu rakstzīmi vienlaicīgi, līdz tas atrod burtu "e". Kad tas atrod vienu, tas pārtrauc meklēšanu un atgriež indeksa numuru, kur tas atrodas. Ja tas sasniedz virknes beigas, tas atgriež -1, lai norādītu, ka nekas netika atrasts.

 drukāt (mylines [0] .find ("e")) 

Izeja

3

Atgriešanās vērtība "3" norāda, ka burts "e" ir ceturtais simbols, "e" "Lorem". (Atcerieties, ka indekss ir nulles: indekss 0 ir pirmā rakstzīme, 1 ir otrais, utt.)

Atrašanas () metode aizņem divus papildu papildu parametrus: sākuma indeksu un apstāšanās indeksu, norādot, kur rindā meklēšanas sākums un beigas. Piemēram, virkne .find ("abc", 10, 20) meklēs virsrakstu "abc", bet tikai no 11. līdz 21. raksturs. Ja apstāšanās nav norādīta, atradīsiet () sāksies indeksa sākumā un apstāsies virknes beigās.

Piemēram, šāds paziņojums mylines [0] meklē "e", sākot ar piekto rakstzīmi.

 drukāt (mylines [0] .find ("e", 4)) 

Izeja

 24 

Citiem vārdiem sakot, sākot ar 5. rakstzīmi rindā [0], pirmais "e" atrodas 24. indeksā ("e" "nec").

Lai sāktu meklēšanu rādītājā 10, un apstāties pie indeksa 30:

 drukāt (mylines [1] .find ("e", 10, 30)) 

Izeja

 28 

(Pirmais "e" "Maecenas").

Ja atrast () meklēšanas apgabalā nav atrodams apakšvirsraksts, tas atgriezīs numuru -1, norādot uz neveiksmi:

 drukāt (mylines [0] .find ("e", 25, 30)) 

Izeja

-1

Nebija "e" gadījumu starp indeksiem 25 un 30.

Meklējot visus apakšvirsmas gadījumus

Bet kas notiks, ja mēs vēlamies atrast katru apakšvirsmas gadījumu, ne tikai pirmo, ar kuru mēs sastopamies? Mēs varam atkārtot virkni, sākot no iepriekšējā spēles indeksa.

Šajā piemērā mēs izmantosim kādu laiku, lai atkārtoti atrastu burtu "e". Kad ir atrasts notikums, mēs atkal saucam par atrašanu, sākot no jaunas vietas virknē. Konkrēti, pēdējās notikuma atrašanās vieta, kā arī virknes garums (lai mēs varētu virzīties uz priekšu pēdējo). Kad atrašana atgriežas -1 vai starta indekss pārsniedz virknes garumu, mēs pārtraucam.

 # Izveidojiet mylines, kā parādīts iepriekš mylines = [] # Atzīstiet tukšu sarakstu. ar atvērtu ('lorem.txt', 'rt') kā myfile: # Atveriet lorem.txt teksta lasīšanai. Myline failā myfile: # Katrai faila rindiņai mylines.append (myline.rstrip ('' ')) # sloksnes rindiņa un pievienošana sarakstam. # Atrodiet un izdrukājiet visus vēstules "e" rādītājus = 0 # pašreizējais indekss prev = 0 # iepriekšējais indekss str = mylines [0] # meklējamā virkne (pirmais mylines elements) substr = "e" # apakšvirsraksts, lai meklētu bet indekss = len (str)) ('n' + str); # Izdrukājiet sākotnējo virkni zem e 

Izeja

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

Ietver regulāras izteiksmes

Sarežģītiem meklējumiem jāizmanto regulāras izteiksmes.

Python regulāro izteiksmju moduli sauc par re . Lai to izmantotu savā programmā, importējiet moduli pirms tā izmantošanas:

 importēt atkārtoti 

Re modulis īsteno regulāras izteiksmes, apkopojot meklēšanas modeli raksta objektā. Šā objekta metodes var izmantot, lai veiktu atbilstības operācijas.

Piemēram, pieņemsim, ka vēlaties meklēt jebkuru vārdu savā dokumentā, kas sākas ar burtu d un beidzas ar burtu r . To mēs varam paveikt, izmantojot regulāru izteiksmi " bd w * r b ". Ko tas nozīmē?

rakstzīmju secībanozīmē
bVārdu robeža atbilst tukšai virknei (jebkas, ieskaitot neko), bet tikai tad, ja tas parādās pirms vai pēc nevēlamas rakstzīmes. "Vārdu rakstzīmes" ir skaitļi no 0 līdz 9, mazie un lielie burti vai pasvītrojums (" _ ").
dMazais burts d .
w *w apzīmē jebkuru vārdu rakstzīmi, un * ir kvantitatīvs, kas nozīmē "nulli vai vairāk no iepriekšējās rakstzīmes". Tātad w * atbilst nulles vai vairākām vārdu rakstzīmēm.
rMazais burts r .
bVārdu robeža.

Tāpēc šī regulārā izteiksme atbilst jebkurai virknei, ko var raksturot kā "vārdu robežu, tad mazo burtu" d ", tad nulles vai vairāk vārdu rakstzīmes, pēc tam mazo burtu" r ", tad vārdu robežu." virknes, kuras var aprakstīt šādā veidā, ietver vārdus " iznīcinātājs", " dour " un ārsts, un saīsinājumu dr .

Lai izmantotu šo regulāro izteiksmi Python meklēšanas operācijās, mēs vispirms to apkopojam raksta objektā. Piemēram, šāds Python paziņojums izveido raksta objekta nosaukumu, kuru var izmantot, lai veiktu meklēšanu, izmantojot šo regulāro izteiksmi.

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

Piezīme: burts r pirms mūsu virknes iepriekš minētajā paziņojumā ir svarīgs. Tas liek Python interpretēt mūsu virkni kā neapstrādātu virkni, tieši tā, kā mēs to rakstījām. Ja mēs nepievienojām virkni ar r, Python interpretētu glābšanas sekvences, piemēram, b citos veidos. Ikreiz, kad nepieciešams Python interpretēt jūsu virknes burtiski, norādiet to kā neapstrādātu virkni, pirms tam pievienojot to ar r .

Tagad mēs varam izmantot raksta objekta metodes, piemēram, meklēšanu (), lai meklētu virkni apkopotajai regulārajai izteiksmei, meklējot atbilstību. Ja tā konstatē, tas atgriezīs īpašu rezultātu, ko sauc par atbilstības objektu. Pretējā gadījumā tas atgriežas , iebūvēts Python konstante, kas tiek izmantota kā būla vērtība "false".

Piemērs

 importa re str = "Labrīt, ārsts." pat = re.compile (r "bd w * r b") # kompilēt regex "bd w * r b" uz parauga objektu, ja pat.search (str)! = Nav: # Meklēt modeli. Ja atrodaties, drukājiet ("Atrod.") 

Izeja

 Atradu. 

Lai veiktu gadījuma nejutīgu meklēšanu, kompilēšanas solī varat norādīt īpašo konstantu re.IGNORECASE :

 importa re str = "Sveiki, DoctoR." pat = re.compile (r "bd w * r b", re.IGNORECASE) # lielie un mazie burti atbilst, ja pat.search (str)! = nav: izdrukāt ("Atradu.") 

Izeja

 Atradu. 

Visu to apvienojot

Tāpēc tagad mēs zinām, kā atvērt failu, lasīt rindas sarakstā un atrast apakšvirzienu kādā no šī saraksta elementiem. Izmantosim šīs zināšanas, lai izveidotu dažas piemēru programmas.

Drukāt visas rindas, kas satur virsrakstu

Turpmāk aprakstītā programma nolasa žurnāla faila rindu pēc rindas. Ja rindā ir vārds "kļūda", tas tiek pievienots sarakstam, ko sauc par kļūdām . Ja nē, tas tiek ignorēts. Apakšējā () virknes metode pārvērš visas virknes uz mazajiem burtiem salīdzināšanas nolūkos, padarot meklēšanas gadījumu nejutīgu, nemainot sākotnējās virknes.

Ņemiet vērā, ka atrast () metodi tieši sauc par zemākas () metodes rezultātu; to sauc par metožu ķēdi . Ņemiet vērā arī to, ka izdrukas () paziņojumā mēs izveidojam izejas virkni, pievienojot vairākas virknes ar + operatoru.

 kļūdas = [] # Saraksts, kurā mēs saglabāsim rezultātus. linenum = 0 substr = "kļūda" .lower () # Substring meklēt. ar atvērtu ('logfile.txt', 'rt') kā myfile: rindai myfile: linenum + = 1, ja line.lower () atrast (substr)! = -1: # ja gadījuma nejutīga atbilstība, kļūdas. pievienot ("Line" + str (linenum) + ":" + line.rstrip ('n')) kļūdām kļūdās: drukāt (kļūda) 

Izeja

 6. līnija: 28. marts 09:10:37 Kļūda: nevar sazināties ar serveri. Savienojums atteikts. 10. līnija: 28. marts 10:28:15 Kernel kļūda: norādītā atrašanās vieta nav uzstādīta. 14. līnija: 28. marts 11:06:30 KĻŪDA: usb 1-1: nevar iestatīt konfigurāciju, iziet. 

Izvilkt visas rindas, kas satur virsrakstu, izmantojot regex

Zemāk norādītā programma ir līdzīga iepriekšminētajai programmai, bet izmanto regulāru izteiksmju moduli. Kļūdas un līniju numuri tiek saglabāti kā tuples, piemēram, (linaum, line). Sarakstu izveido papildu pievienojošās iekavās kļūdas.append () paziņojumā. Nosaukuma elementi ir norādīti līdzīgi sarakstam, ar nulles indeksu iekavās. Kā šeit konstruēts, kļūda [0] ir linaums un kļūda [1] ir saistīta līnija, kurā ir kļūda.

 importa atkārtotas kļūdas = [] linenum = 0 pattern = re.compile ("kļūda", "re.IGNORECASE") # Sastādīt lietu nejūtīgu regexu ar atvērtu ("logfile.txt", "rt") kā myfile: rindai Myfile : linenum + = 1 if pattern.search (rinda)! = Nav: # Ja atbilstība tiek atrasta kļūdas dēļ.izveidot ((linenum, line.rstrip ('' '))) kļūdām kļūdās: # Iterate over list drukāšanai ("Line" + str (err [0]) + ":" + err [1]) 

Izeja (tāpat kā iepriekš)

 6. līnija: 28. marts 09:10:37 Kļūda: nevar sazināties ar serveri. Savienojums atteikts. 10. līnija: 28. marts 10:28:15 Kernel kļūda: norādītā atrašanās vieta nav uzstādīta. 14. līnija: 28. marts 11:06:30 KĻŪDA: usb 1-1: nevar iestatīt konfigurāciju, iziet. 

Izvilkt visas līnijas, kurās ir tālruņa numurs

Tālāk esošā programma izdrukā jebkuru teksta faila rindu info.txt, kas satur ASV vai starptautisko tālruņa numuru. Tas to panāk ar regulāru izteiksmi " (+ {{1, 2})? [S .-]? D {3} [s .-]? D {4} ". Šis regex atbilst šādiem tālruņa numuru apzīmējumiem:

  • 123-456-7890
  • (123) 456-7890
  • 123 456 7890
  • 123, 456, 7890
  • +91 (123) 456-7890
 importa atkārtotas kļūdas = [] linenum = 0 pattern = re.compile (r "(+) {{} {{}.]] {{}}. {4} ") ar atvērtu ('info.txt', 'rt') kā myfile: rindai Myfile: linenum + = 1, ja pattern.search (line)! = Nav: # Ja meklējumi meklēs atbilstību, kļūdas .append ((linenum, line.rstrip ('' '))) kļūdām kļūdās: drukāt ("Line", str (err [0]), ":" + "err [1]) 

Izeja

 3. rinda: Mans tālruņa numurs ir 731.215.8881. 7. līnija: Jūs varat sasniegt Mr Walters pie (212) 558-3131. 12. rinda: Viņa pārstāvis Kennedy kundze ir sasniedzams +12 (123) 456-7890 14. rindā: ar viņu var sazināties arī pa tālruni (888) 312.8403, 12. papildinājums. 

Meklēt vārdnīcu vārdiem

Tālāk esošā programma meklē vārdus jebkuram vārdam, kas sākas ar h un beidzas ar pe . Ievadei tā izmanto vārdnīcu failu, kas iekļauts daudzās Unix sistēmās, / usr / share / dict / words .

 importēt re filename = "/ usr / share / dict / words" pattern = re.compile (r "bh w * pe $", re.IGNORECASE) ar atvērtu (faila nosaukumu, "rt") kā myfile: rindai myfile: if pattern.search (rinda)! = Nav: drukāt (rinda, beigas = '') 

Izeja

 Ceru, ka heliotropa cerība ir hornpipe horoskops