Hogyan szedhetem ki a szövegfájl meghatározott részeit a Python használatával?

Szöveg kivonása a fájlból a parancsfájlok és programozás általános feladata, és a Python megkönnyíti. Ebben az útmutatóban a Python 3 programozási nyelvének használatával néhány egyszerű módszert találunk a fájlból történő kivonásra.

Ebben az útmutatóban a Python 3-as verzióját fogjuk használni. A legtöbb rendszer előre telepítve van a Python 2.7 programmal. Míg a Python 2.7-et a legtöbb örökölt kódban használják, a Python 3 a Python nyelv jelenlegi és jövője. Hacsak nincs konkrét oka annak, hogy írjon vagy támogasson örökölt Python-kódot, javasoljuk, hogy dolgozzon a Python 3-ban.

Microsoft Windows esetén a Python3 letölthető a http://www.python.org webhelyről. A telepítés során győződjön meg róla, hogy mindkét felhasználó ellenőrzi, hogy az „Összes telepítő telepítése és a Python hozzáadása a PATH-hoz” opciókat az alábbi képen látható-e.

Linuxon a Python 3 telepíthető a csomagkezelőjével. Például a Debian vagy az Ubuntu esetén a következő parancsot telepítheti:

 sudo apt-get update && sudo apt-get install python3 

MacOS esetén a Python 3 telepítője letölthető a python.org oldalról, a fentiek szerint. Ha a Homebrew csomagkezelőt használja, akkor azt a terminálablak megnyitásával is telepítheti ( AlkalmazásokSegédprogramok ), és futtathatja ezt a parancsot:

 főzzük be a python3-at 

Python futtatása

Linuxon és MacOS-on a Python 3 tolmács futtatására szolgáló parancs python3 . A Windows rendszeren, ha telepítette a hordozókat, a parancs py . Az oldalon található parancsok a python3-at használják; ha Windows-on van, akkor minden parancsban helyettesítse a py for python3- t.

A Python opció nélküli futtatása elindítja az interaktív tolmácsot. A tolmács használatával kapcsolatos további információkért lásd: Python áttekintés: a Python tolmács használata. Ha véletlenül belép a tolmácsba, kiléphet a parancsból a exit () vagy quit () parancs segítségével.

A Python fájlnévvel történő futtatása ezt a python programot fogja értelmezni. Például:

 python3 program.py 

... futtatja a program.py fájlban található programot .

Oké, hogyan használhatjuk a Pythont, hogy szöveges fájlból kivonjuk a szöveget?

Adatok olvasása szöveges fájlból

Először olvassunk el egy szöveges fájlt. Tegyük fel, hogy egy lorem.txt nevű fájldal dolgozunk, amely néhány latin sorból áll:

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

Quisque a dignissim lacusnál.

Megjegyzés: A következő példákban dolgozunk a fájlban található szöveggel. Nyugodtan másolja át és illessze be a fenti latin szöveget egy szövegfájlba, és mentse el a lorem.txt formátumba, így a példakódot a fájlként bevitelként futtathatja.

A Python program a beépített nyitott () függvény segítségével szöveges fájlt olvashat. Például az alábbi egy Python 3 program, amely megnyitja a lorem.txt szöveget szöveges módban történő olvasáshoz, olvassa el a tartalmat egy karakterlánc-változónak, amelynek tartalma szerepel, bezárja a fájlt, majd kinyomtatja az adatokat.

 myfile = open ("lorem.txt", "rt") # nyitott lorem.txt szöveges tartalom olvasásához = myfile.read () # olvasd el a teljes fájlt egy string myfile.close () # bezárja a fájl nyomtatását (tartalom) # nyomtatási tartalom 

Itt a myfile az a név, amelyet a fájlobjektumunknak adunk.

A "( rt) " paraméter a nyitott () függvényben azt jelenti, hogy "megnyitjuk ezt a fájlt a r ead t ext adatokhoz"

A hash jel (" # ") azt jelenti, hogy a sor többi részén mindent megjegyzünk, és ezt a Python tolmács figyelmen kívül hagyja.

Ha ezt a programot a read.py nevű fájlba menti, futtathatja a következő paranccsal.

 python3 read.py 

A fenti parancs a lorem.txt tartalmát adja meg :

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

Quisque a dignissim lacusnál.

A "nyitott" használatával

Fontos, hogy a megnyitott fájlokat a lehető leghamarabb bezárja: nyissa meg a fájlt, hajtsa végre a műveletet, és zárja be. Ne hagyja nyitva hosszabb ideig.

Amikor fájlokkal dolgozik, a jó gyakorlat, hogy a nyitott ... használatával összetett állításként használjuk. A legtisztább módja annak, hogy megnyitja a fájlt, működjön rajta, és bezárja a fájlt, mindössze egy könnyen olvasható kódblokkban. A fájl automatikusan bezáródik a kódblokk befejezésekor.

Nyitott ... as használatával átírhatjuk a programunkat, hogy így nézzen ki:

 nyitott ('lorem.txt', 'rt') mint myfile: # Nyissa meg a lorem.txt szöveget a szöveg tartalmának olvasásához = myfile.read () # Olvassa el a teljes fájlt egy string nyomtatásra (tartalom) # A karakterlánc nyomtatása 

Megjegyzés: A bemélyedés fontos a Pythonban. A Python programok a sor elején fehér teret használnak, hogy meghatározzák a hatókört, például egy kódblokkot. Javasoljuk, hogy négy szintet használjon a bemélyedés szintjén, és hogy helyet használjon helyett fülek helyett. A következő példákban győződjön meg róla, hogy a kódja pontosan úgy van feltüntetve, ahogy az itt látható.

Mentse el a programot read.py-ként és hajtsa végre:

 python3 read.py 

kibocsátás

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

Quisque a dignissim lacusnál.

Szöveges fájlok olvasása soronként

Az eddigi példákban egyszerre olvastuk az egész fájlt. A teljes fájl olvasása nem nagy dolog a kis fájlokkal, de általában nem ez egy nagyszerű ötlet. Egyrészt, ha a fájl nagyobb, mint a rendelkezésre álló memória mennyisége, hiba lép fel.

Szinte minden esetben jobb ötlet egy szövegfájl egy sorban történő olvasása.

A Pythonban a fájl objektum iterátor. Az iterátor egy olyan típusú Python-objektum, amely bizonyos módon viselkedik, ha ismételten működik. Például használhat egy hurkot a fájlobjektum ismételt működtetésére, és minden alkalommal, amikor ugyanazt a műveletet végrehajtja, egy másik, vagy "következő" eredményt kap.

Szövegfájlok esetén a fájlobjektum egyszerre egyszeresíti a szöveg egy sorát. A szöveg egy sorát az adatok "egységének" tekinti, így a for ... in loop utasításban egyszerre sorba állíthatjuk az adatokat:

 nyitott ('lorem.txt', 'rt') mint myfile: # Nyissa meg a lorem.txt fájlt a myline szövegének olvasásához a myfile-ben: # Minden sorhoz olvassa el a karakterlánc nyomtatásához (myline) # nyomtassa ki a karakterláncot, ismételje meg 

kibocsátás

 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris nem maximus purus. Maecenas sit amet pretium tellus. Quisque a dignissim lacusnál. 

Figyeljük meg, hogy minden sor után egy extra sortörést kapunk ("newline"). Ennek oka, hogy két új sor kerül nyomtatásra. Az első az új sor a szövegfájl minden sorának végén. A második újsor megtörténik, mert alapértelmezés szerint a nyomtatás () egy sorszakadást ad hozzá a nyomtatás végére.

Tároljuk a szövegsorokat egy változóban - nevezetesen egy lista változóban -, hogy jobban megnézhessük.

Szövegadatok tárolása egy lista változójában

A Pythonban a listák hasonlóak, de nem ugyanazok, mint a C vagy Java tömbök. A Python lista indexelt adatokat tartalmaz, különböző hosszúságú és típusú.

 mylines = [] # Egy üres lista, amely a mylines nevet tartalmazza. nyitott ('lorem.txt', 'rt') mint myfile: # Nyissa meg az lorem.txt szöveget a szöveges adatok olvasásához. myline a myfile-ben: # Minden sorban, amelyet myline-ként tárolunk, a mylines.append (myline) # hozzáadja a tartalmát a mylineshez. print (mylines) # A lista kinyomtatása. 

A program kimenete egy kicsit más. A lista tartalmának kinyomtatása helyett ez a program kinyomtatja listaobjektumunkat, amely így néz ki:

kibocsátás

 ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla arcu congue év aliquam mollis. Maecenas sit amet pretium tellus. Praesent sed rhoncus eo. Duis id commodo orci. \ T 

Itt látjuk a lista nyers tartalmát. Nyers objektum formájában egy lista vesszővel elválasztott listaként jelenik meg. Itt minden egyes elemet karakterláncként ábrázolunk, és minden egyes új sor a menekülési karakter szekvenciájaként jelenik meg, \ t

A C vagy Java tömbhöz hasonlóan a lista elemeihez hozzáférhetünk egy indexszám megadásával a változó neve után, zárójelben. Az indexszámok nullától indulnak - más szavakkal, egy lista n- es elemének száma n -1.

Megjegyzés: Ha kíváncsi, hogy miért indulnak az indexszámok nulla helyett egy, akkor nem vagy egyedül. A számítógép-tudósok a múltban megvitatták a nulla alapú számozási rendszerek hasznosságát. 1982-ben Dijkstra Edsger véleményt nyilvánított a témáról, elmagyarázva, hogy a nulla alapú számozás a legjobb módja az adatok számítógépes tudományokban történő indexelésének. Ön maga is elolvashatja a jegyzetet - kényszerítő érveket tesz.

A lista első elemeit a lista neve után a zárójelben található 0-as szám megadásával tudjuk kinyomtatni:

 Nyomtatás (mylines [0]) 

kibocsátás

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

Vagy a harmadik sor, a 2. index megadásával:

 Nyomtatás (mylines [2]) 

kibocsátás

 Quisque a dignissim lacusnál. 

Ha azonban megpróbálunk elérni egy olyan indexet, amelyre nincs érték, hiba lép fel:

 Nyomtatás (mylines [3]) 

kibocsátás

 Traceback (legutóbbi hívás utoljára): Fájl, sor, nyomtatásban (mylines [3]) IndexError: az indexlistán kívüli lista 

A listaobjektum iterátor, így a lista minden elemének kinyomtatásához a következővel ...

 mylines = [] # Nyissa meg az üres listát nyitott ('lorem.txt', 'rt') mint myfile: # Nyissa meg az lorem.txt szöveget a szöveg olvasásához. a myfile sorában: # A szöveg minden sorához a mylines.append (line) # hozzáadja ezt a sort a listához. elemhez: # A lista minden eleméhez nyomtassa ki (elem) #. 

kibocsátás

 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris nem maximus purus. Maecenas sit amet pretium tellus. Quisque a dignissim lacusnál. 

De még mindig újabb sorokat kapunk. Szövegfájlunk minden sora egy újsoros karakterrel (' n ') végződik, amelyet nyomtat. Továbbá, minden egyes sor nyomtatása után a nyomtatás () hozzáad egy új sort, kivéve, ha azt mondja, hogy másképp csinálja.

Ezt az alapértelmezett viselkedést a nyomtatási () hívás végpont paraméterének megadásával módosíthatjuk:

 nyomtatás (elem, vég = '') 

Ha egy üres karakterláncot állít be (két külön idézőjelként, szóköz nélkül), akkor a nyomtatásnak () semmit sem kell nyomtatnia egy sor végén, hanem egy új karakter helyett.

A felülvizsgált program így néz ki:

 mylines = [] # Nyissa meg az üres listát nyitott ('lorem.txt', 'rt') mint myfile: # Nyissa meg a lorem.txt fájlt a szöveg olvasásához a myfile sorában: # Minden szövegsorhoz, mylines.append ( line) # hozzáadja ezt a sort a listához. elemhez: # A lista minden egyes eleméhez nyomtasson (elem , vég = '' ) # nyomtassa ki , extra sorok nélkül . 

kibocsátás

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

Quisque a dignissim lacusnál.

Az itt látható új sorok valójában a fájlban vannak; mindegyik sor végén egy különleges karakter (' n '). Ezektől megszabadulni akarunk, ezért nem kell aggódnunk rájuk, amikor feldolgozzuk a fájlt.

Hogyan lehet új vonalakat csíkolni?

Ahhoz, hogy teljesen eltávolítsuk az új vonalakat, csíkozhatjuk őket. A karakterlánc csíkja egy vagy több karakter, általában a szóköz eltávolítása a karakterlánc elejéről vagy végéről.

Tipp: Ezt a folyamatot néha „vágásnak” is nevezik.

A Python 3 karakterlánc objektumának van egy rstrip () nevű módszere, amely a karakterláncok jobb oldalán lévő karaktereket csíkolja . Az angol nyelv balról jobbra szól, így a jobb oldali eltávolítás eltávolítja a karaktereket a végétől.

Ha a változó nevet mystring- nek nevezzük, akkor a jobb oldali oldalát a mystring.rstrip ( chars ) segítségével lehet eltörölni, ahol a karakterek egy karakterlánc, amely a szalag jobb oldalán található, hogy csíkozzon . Például a "123abc" .rstrip ("bc") visszatér 123a-ra .

Tipp: Amikor a programban egy karakterláncot reprezentál a szó szerinti tartalommal, akkor azt karakterláncnak hívják. A Pythonban (mint a legtöbb programnyelvben) a string literálokat mindig idézik - mindkét oldalon egyetlen (vagy) kettős ("") idézettel . A Pythonban az egy- és kettős idézetek egyenértékűek; mindaddig, amíg a karakterlánc mindkét végén találkoznak, hagyományos, emberi olvasható karakterláncot (például Hello ), kettős idézetekben ( "Hello" ), ha egyetlen karaktert képvisel (például b ), vagy egyetlen különleges karakter, például az új sor karaktere ( n ), hagyományos idézőjelek használata ( 'b', 'n' ). A Pythonban lévő karakterláncok használatáról további információkat olvashat a húrok dokumentációjáról Pythonban.

Az .rstrip ('' ') utasítás- karakterlánc egy új sor karaktert fog eltüntetni a karakterlánc jobb oldalán. Programunk következő verziója a sorokat olvassa el, amikor minden sort olvas a szövegfájlból:

 mylines = [] # Egy üres lista kijelzése. nyitott ('lorem.txt', 'rt') mint myfile: # Nyissa meg a lorem.txt szöveget a szöveg olvasásához. myline a myfile-ben: # A fájl minden sorához: mylines.append (myline.rstrip ('' ')) # szalag újsor és hozzáadja a listához. elemhez: # A lista minden eleméhez nyomtassa ki (elem) #. 

A szöveg most egy lista változóban van tárolva, így az egyes sorok indexszámmal érhetők el. Az új vonalak eltávolításra kerültek, ezért nem kell aggódnunk róluk. Mindig visszahelyezhetjük őket, ha rekonstruáljuk a fájlt és írjuk a lemezre.

Most keressük meg a listában lévő sorokat egy adott szubjektumhoz.

Tegyük fel, hogy egy bizonyos kifejezés, vagy akár egyetlen betű előfordulását szeretnénk megtalálni. Például talán tudnunk kell, hogy hol van minden "e". Ezt a karakterlánc keresési () módszerével tudjuk elérni.

A lista szöveget minden sorban string objektumként tárolja. Minden karakterlánc-objektumnak van egy metódusa, megtalálása (), amely a sztringek első részének előfordulását határozza meg.

Használjuk a find () metódust az "e" betű kereséséhez a szövegfájl első sorában, amelyet a listában tárolunk . A mylines első eleme egy szöveges fájl első sorát tartalmazó string objektum. Ez a karakterlánc-objektum talál egy () metódust.

A keresés () zárójelében paramétereket adunk meg. Az első és egyetlen szükséges paraméter az "e" keresendő karakterlánc. A [0] .find utasítások ("e") azt mondják a tolmácsnak, hogy a karakterlánc elején induljon, és először egy karaktert keres, amíg meg nem találja az "e" betűt. Ha talál, találja meg a keresést, és visszaadja az indexszámot, ahol az "e" található. Ha eléri a karaktersorozat végét, akkor a -1- et adja vissza, jelezve, hogy semmi nem található.

 Nyomtatás (mylines [0] .find ( "e")) 

kibocsátás

3

A "3" visszatérési érték azt mondja, hogy az "e" betű a negyedik karakter, az "e" a "Lorem" -ben. (Ne feledje, hogy az index nulla-alapú: a 0-as index az első karakter, az 1 a második, stb.)

A keresési () módszer két opcionális, további paramétert vesz igénybe: egy indítási indexet és egy stop indexet, jelezve, hogy a stringben a keresésnek meg kell kezdődnie és befejeznie. Például a .find ("abc", 10, 20) karakterlánc az "abc" címet fogja keresni, de csak a 11. és a 21. karakter között. Ha a leállítás nincs megadva, a keresés () az indexindításnál indul, és megáll a karakterlánc végén.

Például az alábbi állítás az ötödik karaktertől kezdődően az "e" -et keresi az oszlopokban [0] .

 nyomtatás (mylines [0] .find ("e", 4)) 

kibocsátás

 24 

Más szavakkal, az [0] sorban lévő 5. karakterből indulva az első "e" a 24-es indexben található (az "e" a "nec" -ben).

A 10-es indexben történő keresés megkezdése és a 30-as index leállítása:

 nyomtatás (mylines [1] .find ("e", 10, 30)) 

kibocsátás

 28 

(Az első "e" a "Maecenasban").

Ha a keresés () nem találja meg a keresési tartományban a szubsztrátumot, akkor a -1-es számot adja vissza, jelezve a hibát:

 nyomtatás (mylines [0] .find ("e", 25, 30)) 

kibocsátás

-1

A 25 és 30 indexek között nem volt "e" előfordulás.

A szubsztrátum minden előfordulásának megtalálása

De mi van, ha egy szubsztrátum minden előfordulását szeretnénk megtalálni, nem csak az első találkozásunkat? A karakterlánc fölé sorolható, az előző mérkőzés indexétől kezdve.

Ebben a példában egy rövid hurkot használunk az "e" betű ismételt megkereséséhez . Amikor előfordul egy esemény, hívjuk meg ismét a keresést, kezdve a karakterlánc új helyéről. Pontosabban, az utolsó esemény helyét, valamint a karakterlánc hosszát (így továbbléphetünk az utolsóig). Ha a talál vissza -1, vagy a kezdőindex meghaladja a karakterlánc hosszát, megállítjuk.

 # Építkezések építése a fenti ábrák szerint = [] # Egy üres lista kijelzése. nyitott ('lorem.txt', 'rt') mint myfile: # Nyissa meg a lorem.txt szöveget a szöveg olvasásához. myline a myfile-ben: # A fájl minden sorához: mylines.append (myline.rstrip ('' ')) # szalag újsor és hozzáadja a listához. # Keresse meg és nyomtassa ki az "e" betű összes előfordulását = 0 # aktuális index prev = 0 # előző index str = mylines [0] # keresendő karaktersorozat (első elem a mylines-nek) subst = "e" # szubsztráció a kereséshez míg az index = len (str)) nyomtatás ('n' + str); # Nyomtassa ki az eredeti karakterláncot az e alatt 

kibocsátás

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

Rendszeres kifejezéseket tartalmaz

Komplex keresések esetén rendszeres kifejezéseket kell használni.

A Python rendszeres kifejezések modulját re . A program használatához importálja a modult a használat előtt:

 import újra 

A re- modul rendszeres kifejezéseket hajt végre a keresési minta egy objektum objektumba való összeállításával. Ennek az objektumnak a módszerei felhasználhatók a meccs műveletek végrehajtására.

Tegyük fel például, hogy a dokumentumban olyan szót szeretne keresni, amely a d betűvel kezdődik és az r betűvel végződik. Ezt a " bd w * r b " reguláris kifejezéssel végezhetjük el. Mit is jelent ez?

karaktersorozatjelentés
\ bA szóhatár egy üres karakterláncot (bármit, beleértve a semmit sem), de csak akkor, ha egy nem szó karakter előtt vagy után jelenik meg. A "Word karakterek" a 0 - 9 számjegyek, a kis - és nagybetűk, vagy az aláhúzás (" _ ").
dKisbetűs d .
\ w *w jelentése bármely szó karakter, és * a kvantifikátor, amely "az előző karakter nulla vagy annál nagyobb". Tehát a w * a nulla vagy több
rKisbetűs r .
\ bSzóhatár.

Tehát ez a rendszeres kifejezés minden olyan karakterlánchoz illeszkedik, amelyet "szóhatárként, majd kisbetűs", majd nulla vagy több szó karakterként, majd kisbetűs "r", majd szóhatárként lehet leírni. az ily módon leírható sztringek közé tartoznak a romboló, a dour és az orvos szavak és a dr .

A Python keresési műveletekben a rendszeres kifejezés használatához először egy mintaobjektumba kell fordítanunk. Például a következő Python utasítás létrehoz egy mintaobjektumot, amelyet a szokásos kifejezés segítségével kereshetünk.

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

Megjegyzés: A fenti állításban szereplő r betű fontos. Azt mondja a Pythonnak, hogy a stringet nyers karakterláncként értelmezze, pontosan úgy, ahogy azt gépeltük. Ha nem adtuk meg a karakterláncot egy r- rel, a Python más módon is értelmezné az olyan menekülési Ha szüksége van Python-ra, hogy szó szerint értelmezze a karakterláncokat, akkor adja meg azt nyers karakterláncként az r- vel való előtaggal.

Most már használhatjuk a mintaobjektum módszereit, mint például a keresést (), hogy keressünk egy karakterláncot a fordított szabályos kifejezésre, keresve a mérkőzést. Ha úgy találja, hogy egy, akkor egy speciális eredményt kap, amelyet egy mérkőzés objektumnak neveznek. Ellenkező esetben visszatér a Nincs, a beépített Python konstans, amelyet úgy használnak, mint a "false" logikai értéket.

Példa

 import re str = "Jó reggelt, orvos." pat = re.compile (r "bd w * r b") # compile regex "bd w * r b" egy mintaobjektumra, ha pat.search (str)! = Nincs: # Keresés a minta. Ha megtalálta, nyomtassa ki ("Megtalálta.") 

kibocsátás

 Találtam. 

Eset -érzéketlen keresés elvégzéséhez a fordítási lépésben megadhatja a speciális újrakonfigurációs folyamatot:

 import re str = "Hello, DoctoR." pat = re.compile (r "bd w * r b", re.IGNORECASE) # nagy és kisbetűk egyeznek, ha pat.search (str)! = Nincs: nyomtatás ("Megtalálta.") 

kibocsátás

 Találtam. 

Mindezt együtt

Tehát most már tudjuk, hogyan nyithatunk meg egy fájlt, olvassuk el a sorokat egy listába, és keressük meg a felsorolást egy adott elemben. Használjuk ezt a tudást néhány példaprogram létrehozásához.

Nyomtassa ki a szubsztrátumot tartalmazó összes sort

Az alábbi program egy naplófájlt soronként olvas. Ha a sorban a "hiba" szó szerepel, akkor azt hozzáadjuk a hibakereséshez . Ha nem, akkor figyelmen kívül hagyja. Az alacsonyabb () karakterlánc módszer az összes karakterláncot kisbetűvé alakítja az összehasonlítás céljából, így a keresési eset érzéketlen, az eredeti karakterláncok módosítása nélkül.

Ne feledje, hogy a keresési () metódust közvetlenül az alacsonyabb () módszer eredményére hívják; ezt metódusláncnak nevezzük. Ne feledje, hogy a nyomtatási () utasításban egy kimeneti karakterláncot állítunk össze, ha több karakterláncot egyesítünk a + operátorral.

 hibák = [] # A lista az eredményeket tárolja. linenum = 0 subst = "hiba" .lower () # Aljzat a kereséshez. nyitott ('logfile.txt', 'rt') mint myfile: a myfile sorban: linenum + = 1, ha line.lower (). find (subst)! = -1: # ha eset-érzéketlen egyezés, hibák. csatolja ("Vonal" + str (linenum) + ":" + line.rstrip ('n')) hiba esetén: print (err) 

kibocsátás

 6. sor: március 28 09:10:37 Hiba: nem tud kapcsolatba lépni a szerverrel. Kapcsolódás elutasítva. 10. sor: 2008. március 28. 10:28:15 Kernel hiba: A megadott hely nincs felszerelve. 14. sor: március 28. 11:06:30 HIBA: usb 1-1: nem állítható be a konfiguráció, kilépés. 

A regex segítségével kivonja az összes sort, amely tartalmazza a szubsztrátumot

Az alábbi program hasonló a fenti programhoz, de a rendszeres kifejezések modulját használja. A hibákat és sorszámokat sorokként (pl. Linenum, line) tároljuk. A rekordot a hibakeresés () utasításban található további zárójelek hozzák létre. A tuple elemei a listához hasonlóak, zárójelben egy nulla alapú index. Az itt leírtak szerint az err [0] egy vászon, az err [1] pedig a hozzárendelt sor, amely hibát tartalmaz.

 import re hibák = [] linenum = 0 pattern = re.compile ("hiba", re.IGNORECASE) # Eset-érzéketlen regex-et fordítson nyitott ('logfile.txt', 'rt') mint myfile: a myfile sorhoz : linenum + = 1 if pattern.search (line)! = Nincs: # Ha egy találatot találtak hibakeresésekre. ((linenum, line.rstrip ('' '))) hiba esetén: # Iterate over the list sorok nyomtatása ("Line" + str (err [0]) + ":" + err [1]) 

Kimenet (ugyanaz, mint a fentiekben)

 6. sor: március 28 09:10:37 Hiba: nem tud kapcsolatba lépni a szerverrel. Kapcsolódás elutasítva. 10. sor: 2008. március 28. 10:28:15 Kernel hiba: A megadott hely nincs felszerelve. 14. sor: március 28. 11:06:30 HIBA: usb 1-1: nem állítható be a konfiguráció, kilépés. 

A telefonszámot tartalmazó összes sor kivonása

Az alábbi program a szöveges fájl, az info.txt bármelyik sorát nyomtatja ki, amely egy amerikai vagy nemzetközi telefonszámot tartalmaz. Ezt a " (+ {{1, 2})? [.-]? {{}} Szabályos kifejezéssel érte el [{}} {{}} . Ez a regex megegyezik a következő telefonszámokkal:

  • 123-456-7890
  • (123) 456-7890
  • 123 456 7890
  • 123.456.7890
  • +91 (123) 456-7890
 import re hibák = [] linenum = 0 minta = re.compile (r "(d {1, 2})? [.-]? d {3} [.-]? {4} ") nyitott ('info.txt', 'rt') mint myfile: a myfile sorához: linenum + = 1 if pattern.search (line)! = Nincs: # Ha a minta keresés talál egy találatot, hiba .append ((linenum, line.rstrip ('' '))) hiba esetén: print ("Line", str (err [0]), ":" + "err [1]) 

kibocsátás

 3. sor: A telefonszámom 731.215.8881. 7. sor: A Walters úrhoz érheti el a (212) 558-3131-es címet. 12. sor: Az ő ügynöke, Mrs. Kennedy, elérheti a +12 (123) 456-7890-et. 14. sor: Kapcsolatba léphet a (888) 312.8403 (12) kiterjesztésben is. 

Keresse meg a szavak szótárát

Az alábbi program a szótárban keres minden olyan szót, amely a h- vel kezdődik és vége a pe . A bemenetekhez számos Unix rendszeren található / usr / share / dict / words szótárat használ.

 import re filename = "/ usr / share / dict / words" pattern = re.compile (r "h" w * pe $ ", re.IGNORECASE) nyitott (fájlnév, " rt ") mint myfile: sorban myfile: if pattern.search (sor)! = Nincs: nyomtatás (sor, vég = '') 

kibocsátás

 Remélem, heliotróp remény hornpipe horoszkóp hype