Come posso estrarre parti specifiche di un file di testo usando Python?

Estrarre il testo da un file è un'attività comune nello scripting e nella programmazione, e Python lo rende facile. In questa guida, discuteremo alcuni semplici modi per estrarre il testo da un file usando il linguaggio di programmazione Python 3.

In questa guida utilizzeremo Python versione 3. La maggior parte dei sistemi viene preinstallata con Python 2.7. Mentre Python 2.7 è usato nella maggior parte dei codici legacy, Python 3 è il presente e il futuro del linguaggio Python. A meno che tu non abbia una ragione specifica per scrivere o supportare il codice legacy di Python, ti consigliamo di lavorare in Python 3.

Per Microsoft Windows, Python3 può essere scaricato da //www.python.org. Durante l'installazione, assicurati che le opzioni "Installa il lanciatore per tutti gli utenti" e "Aggiungi Python al PERCORSO" siano entrambe selezionate, come mostrato nell'immagine seguente.

Su Linux, puoi installare Python 3 con il tuo gestore di pacchetti. Ad esempio, su Debian o Ubuntu, puoi installarlo con il comando:

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

Per macOS, il programma di installazione di Python 3 può essere scaricato da python.org, come sopra collegato. Se si sta utilizzando il gestore di pacchetti Homebrew, può anche essere installato aprendo una finestra di terminale ( ApplicazioniUtility ) ed eseguendo questo comando:

 brew installa python3 

Esecuzione di Python

Su Linux e macOS, il comando per eseguire l'interprete Python 3 è python3 . Su Windows, se hai installato il programma di avvio, il comando è py . I comandi di questa pagina usano python3 ; se sei su Windows, sostituisci py per python3 in tutti i comandi.

L'esecuzione di Python senza opzioni avvierà l'interprete interattivo. Per ulteriori informazioni sull'utilizzo dell'interprete, vedere Panoramica su Python: utilizzo dell'interprete Python. Se accidentalmente inserisci l'interprete, puoi uscire usando il comando exit () o quit () .

L'esecuzione di Python con un nome file interpreterà il programma Python. Per esempio:

 python3 program.py 

... esegue il programma contenuto nel file program.py .

Ok, come possiamo usare Python per estrarre il testo da un file di testo?

Lettura di dati da un file di testo

Per prima cosa, leggiamo un file di testo. Diciamo che stiamo lavorando con un file chiamato lorem.txt, che contiene alcune righe di latino:

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nec maximus purus. Mecenate siedono l'amet pretium tellus. 

Quisque a dignissim lacus.

Nota: in tutti gli esempi che seguono, lavoriamo con il testo contenuto in questo file. Sentiti libero di copiare e incollare il testo latino sopra in un file di testo e salvarlo come lorem.txt, in modo che tu possa eseguire il codice di esempio usando questo file come input.

Un programma Python può leggere un file di testo usando la funzione built-in open () . Ad esempio, di seguito è riportato un programma Python 3 che apre lorem.txt per la lettura in modalità testo, legge il contenuto in una variabile stringa denominata contenuto, chiude il file e quindi stampa i dati.

 myfile = open ("lorem.txt", "rt") # apre lorem.txt per leggere il contenuto del testo = myfile.read () # legge l'intero file in una stringa myfile.close () # chiude il file print (contenuto) # stampa i contenuti 

Qui, myfile è il nome che diamo al nostro oggetto file.

Il parametro " rt " nella funzione open () significa "stiamo aprendo questo file per visualizzare dati estesi"

L'hash mark (" # ") significa che tutto sul resto di quella linea è un commento, ed è ignorato dall'interprete Python.

Se si salva questo programma in un file chiamato read.py, è possibile eseguirlo con il seguente comando.

 python3 read.py 

Il comando sopra restituisce il contenuto di lorem.txt :

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nec maximus purus. Mecenate siedono l'amet pretium tellus. 

Quisque a dignissim lacus.

Usare "con aperto"

È importante chiudere i file aperti il ​​prima possibile: apri il file, esegui le operazioni e chiudilo. Non lasciarlo aperto per lunghi periodi di tempo.

Quando lavori con i file, è buona norma usare l' open with ... come dichiarazione composta. È il modo più pulito per aprire un file, operare su di esso e chiudere il file, tutto in un unico blocco di codice di facile lettura. Il file viene automaticamente chiuso al termine del blocco di codice.

Usando con open ... come, possiamo riscrivere il nostro programma per assomigliare a questo:

 con open ('lorem.txt', 'rt') come myfile: # Apri lorem.txt per leggere il contenuto del testo = myfile.read () # Leggi l'intero file in una stringa stampa (contenuto) # Stampa la stringa 

Nota: l'indentazione è importante in Python. I programmi Python usano uno spazio bianco all'inizio di una linea per definire l'ambito, come un blocco di codice. Si consiglia di utilizzare quattro spazi per livello di indentazione e di utilizzare spazi anziché tabulazioni. Nei seguenti esempi, assicurati che il tuo codice sia rientrato esattamente come viene presentato qui.

Salva il programma come read.py ed eseguilo :

 python3 read.py 

Produzione

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nec maximus purus. Mecenate siedono l'amet pretium tellus. 

Quisque a dignissim lacus.

Leggere file di testo riga per riga

Negli esempi finora, abbiamo letto l'intero file contemporaneamente. Leggere un file completo non è un problema con i file di piccole dimensioni, ma in generale non è una grande idea. Per prima cosa, se il tuo file è più grande della quantità di memoria disponibile, incontrerai un errore.

In quasi tutti i casi, è una buona idea leggere un file di testo una riga alla volta.

In Python, l'oggetto file è un iteratore. Un iteratore è un tipo di oggetto Python che si comporta in determinati modi quando viene utilizzato ripetutamente. Ad esempio, è possibile utilizzare un ciclo for per operare ripetutamente su un oggetto file e ogni volta che viene eseguita la stessa operazione, si riceverà un risultato diverso o "successivo".

Per i file di testo, l'oggetto file scorre una riga di testo alla volta. Considera una riga di testo come una "unità" di dati, quindi possiamo usare una dichiarazione for ... in loop per iterare sui dati una riga alla volta:

 con open ('lorem.txt', 'rt') come myfile: # Apre il file lorem.txt per leggere il testo per myline in myfile: # Per ogni riga, legalo a una stringa stampa (myline) # stampa quella stringa, ripeti 

Produzione

 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris nec maximus purus. Mecenate siedono l'amet pretium tellus. Quisque a dignissim lacus. 

Si noti che stiamo ricevendo un'interruzione di riga aggiuntiva ("newline") dopo ogni riga. Questo perché vengono stampati due newline. Il primo è il newline alla fine di ogni riga del nostro file di testo. La seconda nuova riga avviene perché, per impostazione predefinita, print () aggiunge una interruzione di riga alla fine di qualsiasi cosa tu abbia chiesto di stampare.

Conserviamo le nostre righe di testo in una variabile, in particolare una variabile di lista, in modo che possiamo esaminarla più da vicino.

Memorizzazione di dati di testo in una variabile di lista

In Python, gli elenchi sono simili ma non uguali a un array in C o Java. Un elenco Python contiene dati indicizzati, di varie lunghezze e tipi.

 mylines = [] # Dichiara una lista vuota denominata mylines. con open ('lorem.txt', 'rt') come myfile: # Apri lorem.txt per leggere i dati di testo. per myline in myfile: # Per ogni riga, memorizzata come myline, mylines.append (myline) # aggiunge il suo contenuto alle mylines. print (mylines) # Stampa la lista. 

L'output di questo programma è leggermente diverso. Invece di stampare il contenuto della lista, questo programma stampa il nostro oggetto lista, che assomiglia a questo:

Produzione

 ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla arcu congue metus aliquam mollis. \ N ', ' Mauris nec maximus purus. Mecenate siedono l'amet pretium tellus. Praesent sed rhoncus eo. Duis id commodo orci. \ N ', ' Quisque at dignissim lacus. \ N '] 

Qui, vediamo il contenuto non elaborato della lista. Nella sua forma di oggetto grezzo, un elenco è rappresentato come un elenco delimitato da virgole. Qui, ogni elemento è rappresentato come una stringa e ogni nuova riga è rappresentata come sequenza di caratteri di escape, \ n .

Proprio come un array in C o Java, possiamo accedere agli elementi di un elenco specificando un numero di indice dopo il nome della variabile, tra parentesi. I numeri indice iniziano da zero - altre parole, il n elemento di una lista ha l'indice numerico n -1.

Nota: se ti stai chiedendo perché i numeri indice iniziano da zero anziché da uno, non sei il solo. Gli informatici hanno discusso l'utilità dei sistemi di numerazione basati su zero in passato. Nel 1982, Edsger Dijkstra diede il suo parere sull'argomento, spiegando perché la numerazione a base zero è il modo migliore per indicizzare i dati in informatica. Puoi leggere tu stesso il memo: è un argomento convincente.

Possiamo stampare il primo elemento di linee specificando il numero di indice 0, contenuto tra parentesi dopo il nome della lista:

 stampa (mylines [0]) 

Produzione

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

Oppure la terza riga, specificando l'indice numero 2:

 stampa (mylines [2]) 

Produzione

 Quisque a dignissim lacus. 

Ma se proviamo ad accedere ad un indice per il quale non c'è valore, otteniamo un errore:

 stampa (mylines [3]) 

Produzione

 Traceback (ultima chiamata più recente): File, linea, in stampa (mylines [3]) IndexError: elenco indice fuori intervallo 

Un oggetto lista è un iteratore, quindi per stampare ogni elemento della lista, possiamo scorrere su di esso con per ... in :

 mylines = [] # Dichiara una lista vuota con open ('lorem.txt', 'rt') come myfile: # Apri lorem.txt per leggere il testo. per la riga in myfile: # Per ogni riga di testo, mylines.append (riga) # aggiunge quella linea alla lista. per elemento in mylines: # Per ogni elemento nell'elenco, stampare (elemento) # stamparlo. 

Produzione

 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris nec maximus purus. Mecenate siedono l'amet pretium tellus. Quisque a dignissim lacus. 

Ma stiamo ancora ricevendo nuovi extra. Ogni riga del nostro file di testo termina con un carattere di nuova riga (' \ n '), che viene stampato. Inoltre, dopo aver stampato ciascuna riga, print () aggiunge una nuova riga a parte, a meno che tu non gli dica di fare altrimenti.

Possiamo cambiare questo comportamento predefinito specificando un parametro finale nella nostra chiamata print () :

 print (element, end = '') 

Impostando la fine di una stringa vuota (rappresentata da due virgolette singole, senza spazio tra), diamo a print () di stampare nulla alla fine di una riga, invece di un carattere di fine riga.

Il nostro programma revisionato si presenta così:

 mylines = [] # Dichiara una lista vuota con open ('lorem.txt', 'rt') come myfile: # Apre il file lorem.txt per leggere il testo per la riga in myfile: # Per ogni riga di testo, mylines.append ( linea) # aggiungi quella linea alla lista. per elemento in mylines: # Per ogni elemento nell'elenco, print (element , end = '' ) # stampa , senza extra newline . 

Produzione

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nec maximus purus. Mecenate siedono l'amet pretium tellus. 

Quisque a dignissim lacus.

Le nuove righe che vedete qui sono effettivamente nel file; sono un carattere speciale (' \ n ') alla fine di ogni riga. Vogliamo sbarazzarci di questi, quindi non dobbiamo preoccuparci di loro mentre elaboriamo il file.

Come spogliare i newline

Per rimuovere completamente le newline, possiamo eliminarle. Per rimuovere una stringa è necessario rimuovere uno o più caratteri, di solito spazi bianchi, dall'inizio o dalla fine della stringa.

Suggerimento: questo processo viene talvolta chiamato anche "ritaglio".

Gli oggetti stringa Python 3 hanno un metodo chiamato rstrip (), che estrae i caratteri dal lato destro di una stringa. La lingua inglese si legge da sinistra a destra, quindi togliere dalla parte destra rimuove i caratteri dalla fine.

Se la variabile è denominata mystring, possiamo rimuovere il lato destro con mystring.rstrip ( chars ), dove char è una stringa di caratteri da rimuovere, se si trovano sul lato destro della stringa. Ad esempio, "123abc" .rstrip ("bc") restituisce 123a .

Suggerimento: quando rappresenti una stringa nel tuo programma con i suoi contenuti letterali, viene chiamata letterale stringa. In Python (come nella maggior parte dei linguaggi di programmazione), le stringhe letterali sono sempre quotate - racchiuse su entrambi i lati da virgolette singole (') o doppie (") .In Python, virgolette singole e doppie sono equivalenti, è possibile utilizzare l'una o l'altra a condizione che corrispondano su entrambe le estremità della stringa È tradizionale rappresentare una stringa leggibile dall'uomo (come Hello ) tra virgolette ( "Ciao" ). Se rappresenti un singolo carattere (ad esempio b ), o un singolo carattere speciale come il carattere di nuova riga ( \ n ), è normale usare virgolette singole ( 'b', '\ n' ). Per ulteriori informazioni su come usare le stringhe in Python, puoi leggere la documentazione delle stringhe in Python.

La stringa di istruzioni .rstrip ('\ n') rimuoverà un carattere di nuova riga dal lato destro della stringa . La seguente versione del nostro programma rimuove le newline quando ogni riga viene letta dal file di testo:

 mylines = [] # Dichiara una lista vuota. con open ('lorem.txt', 'rt') come myfile: # Apri lorem.txt per leggere il testo. per myline in myfile: # Per ogni riga nel file, mylines.append (myline.rstrip ('\ n')) # strip newline e aggiungi alla lista. per elemento in mylines: # Per ogni elemento nell'elenco, stampare (elemento) # stamparlo. 

Il testo è ora memorizzato in una variabile di lista, quindi è possibile accedere a singole righe per numero di indice. I newline sono stati spogliati, quindi non dobbiamo preoccuparci di loro. Possiamo sempre rimetterli in un secondo momento se ricostruiamo il file e lo scriviamo su disco.

Ora, cerchiamo le righe nell'elenco per una sottostringa specifica.

Diciamo che vogliamo localizzare ogni occorrenza di una determinata frase o anche una singola lettera. Ad esempio, forse abbiamo bisogno di sapere dove si trova ogni "e". Possiamo farlo usando il metodo find () della stringa.

L'elenco memorizza ogni riga del nostro testo come oggetto stringa. Tutti gli oggetti stringa hanno un metodo, find (), che individua la prima occorrenza di una sottostringa nella stringa.

Usiamo il metodo find () per cercare la lettera "e" nella prima riga del nostro file di testo, che è memorizzato nella lista mylines . Il primo elemento di mylines è un oggetto stringa contenente la prima riga del file di testo. Questo oggetto stringa ha un metodo find () .

Tra parentesi di find (), specifichiamo i parametri. Il primo e unico parametro richiesto è la stringa da cercare, "e" . L'istruzione mylines [0] .find ("e") dice all'interprete di iniziare dall'inizio della stringa e cercare in avanti, un carattere alla volta, finché non trova la lettera "e". Quando ne trova uno, smette di cercare e restituisce il numero di indice dove si trova "e". Se raggiunge la fine della stringa, restituisce -1 per indicare che non è stato trovato nulla.

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

Produzione

3

Il valore di ritorno "3" ci dice che la lettera "e" è il quarto carattere, la "e" in "Lorem". (Ricorda, l'indice è a base zero: l'indice 0 è il primo carattere, 1 è il secondo, ecc.)

Il metodo find () accetta due parametri aggiuntivi facoltativi: un indice di inizio e un indice di stop, che indicano dove deve iniziare e terminare la ricerca nella stringa. Ad esempio, string .find ("abc", 10, 20) cercherà la sottostringa "abc", ma solo dall'11 ° al 21 ° carattere. Se stop non è specificato, find () inizierà all'inizio dell'indice e si fermerà alla fine della stringa.

Ad esempio, la seguente istruzione cerca "e" in mylines [0], iniziando dal quinto carattere.

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

Produzione

 24 

In altre parole, partendo dal quinto carattere della riga [0], la prima "e" si trova all'indice 24 (la "e" in "nec").

Per avviare la ricerca con l'indice 10 e fermarsi all'indice 30:

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

Produzione

 28 

(La prima "e" in "Mecenate").

Se find () non individua la sottostringa nell'intervallo di ricerca, restituirà il numero -1, che indica il fallimento:

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

Produzione

-1

Non ci sono state occorrenze "e" tra gli indici 25 e 30.

Trovare tutte le occorrenze di una sottostringa

Ma cosa succede se vogliamo individuare ogni occorrenza di una sottostringa, non solo la prima che incontriamo? Possiamo scorrere la stringa, partendo dall'indice della partita precedente.

In questo esempio, useremo un ciclo while per trovare ripetutamente la lettera "e". Quando viene rilevata un'occorrenza, chiamiamo di nuovo find, iniziando da una nuova posizione nella stringa. In particolare, la posizione dell'ultima occorrenza, più la lunghezza della stringa (in modo che possiamo andare oltre l'ultima). Quando find restituisce -1 o l'indice iniziale supera la lunghezza della stringa, ci fermiamo.

 # Costruisci mylines come mostrato sopra mylines = [] # Dichiara una lista vuota. con open ('lorem.txt', 'rt') come myfile: # Apri lorem.txt per leggere il testo. per myline in myfile: # Per ogni riga nel file, mylines.append (myline.rstrip ('\ n')) # strip newline e aggiungi alla lista. # Trova e stampa tutte le occorrenze della lettera "e" index = 0 # indice corrente prev = 0 # indice precedente str = mylines [0] # stringa da cercare (primo elemento di mylines) substr = "e" # sottostringa da cercare while index = len (str)) print ('\ n' + str); # Stampa la stringa originale sotto le e 

Produzione

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

Incorporando espressioni regolari

Per ricerche complesse, è necessario utilizzare espressioni regolari.

Il modulo delle espressioni regolari Python è chiamato re . Per usarlo nel tuo programma, importa il modulo prima di usarlo:

 importa re 

Il modulo re implementa le espressioni regolari compilando un modello di ricerca in un oggetto modello. I metodi di questo oggetto possono quindi essere utilizzati per eseguire le operazioni di corrispondenza.

Ad esempio, supponiamo di voler cercare qualsiasi parola nel documento che inizia con la lettera d e finisce nella lettera r . Possiamo farlo usando l'espressione regolare " \ bd \ w * r \ b ". Cosa significa questo?

sequenza di caratterisenso
\ bUn limite di parole corrisponde a una stringa vuota (qualsiasi cosa, incluso niente), ma solo se appare prima o dopo un carattere diverso da una parola. "Caratteri di parole" sono le cifre da 0 a 9, le lettere minuscole e maiuscole o un carattere di sottolineatura (" _ ").
dLettera minuscola d .
\ w *\ w rappresenta qualsiasi carattere di parola, e * è un quantificatore che significa "zero o più del carattere precedente". Quindi \ w * corrisponderà a zero o più caratteri di parole.
rLettera minuscola r .
\ bConfine di parola

Quindi questa espressione regolare corrisponderà a qualsiasi stringa che può essere descritta come "un limite di parole, quindi una 'd' minuscola, quindi zero o più caratteri di parola, quindi una 'r' minuscola, quindi un limite di parola." le stringhe che possono essere descritte in questo modo includono le parole destroyer, dour e doctor, e l'abbreviazione dr .

Per usare questa espressione regolare nelle operazioni di ricerca di Python, prima dobbiamo compilarla in un oggetto modello. Ad esempio, la seguente istruzione Python crea un oggetto modello denominato pattern che possiamo usare per eseguire ricerche usando quell'espressione regolare.

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

Nota: la lettera r prima della nostra stringa nella dichiarazione di cui sopra è importante. Indica a Python di interpretare la nostra stringa come una stringa grezza, esattamente come l'abbiamo digitata. Se non abbiamo prefisso la stringa con un r, Python interpreterà le sequenze di escape come \ b in altri modi. Ogni volta che hai bisogno che Python interpreti letteralmente le tue stringhe, specificalo come una stringa grezza anteponendo a r .

Ora possiamo usare i metodi dell'oggetto modello, come search () per cercare una stringa per l'espressione regolare compilata, cercando una corrispondenza. Se ne trova uno, restituirà un risultato speciale chiamato oggetto match. Altrimenti restituisce None, una costante Python incorporata che viene utilizzata come il valore booleano "false".

Esempio

 import re = "Buongiorno, dottore". pat = re.compile (r "\ bd \ w * r \ b") # compile regex "\ bd \ w * r \ b" a un oggetto modello se pat.search (str)! = None: # Cerca il modello. Se trovato, stampa ("Trovato".) 

Produzione

 Trovato. 

Per eseguire una ricerca senza distinzione tra maiuscole e minuscole, è possibile specificare la costante speciale re.IGNORECASE nel passaggio di compilazione:

 import re str = "Ciao, DoctoR." pat = re.compile (r "\ bd \ w * r \ b", re.IGNORECASE) # maiuscole e minuscole corrisponderanno se pat.search (str)! = None: print ("Found it.") 

Produzione

 Trovato. 

Mettere tutto insieme

Così ora sappiamo come aprire un file, leggere le linee in una lista e localizzare una sottostringa in ogni dato elemento di quella lista. Usiamo questa conoscenza per costruire alcuni programmi di esempio.

Stampa tutte le righe contenenti sottostringa

Il seguente programma legge un file di registro riga per riga. Se la riga contiene la parola "errore", viene aggiunta a un elenco chiamato errori . In caso contrario, viene ignorato. Il metodo stringa inferiore () converte tutte le stringhe in minuscolo per scopi di confronto, rendendo la ricerca senza distinzione tra maiuscole e minuscole delle stringhe originali.

Si noti che il metodo find () viene chiamato direttamente sul risultato del metodo lower () ; questo è chiamato metodo di concatenamento . Inoltre, si noti che nell'istruzione print (), costruiamo una stringa di output unendo più stringhe con l'operatore + .

 errors = [] # L'elenco in cui verranno memorizzati i risultati. linenum = 0 substr = "error" .lower () # Sottostringa da cercare. con open ('logfile.txt', 'rt') come myfile: per la riga in myfile: linenum + = 1 se line.lower (). find (substr)! = -1: # se corrispondenza insensibile al maiuscolo / minuscolo, errori. append ("Line" + str (linenum) + ":" + line.rstrip ('\ n')) per err in errori: print (err) 

Produzione

 Riga 6: 28 marzo 09:10:37 Errore: impossibile contattare il server. Connessione rifiutata. Riga 10: 28 marzo 10:28:15 Errore kernel: la posizione specificata non è montata. Riga 14: 28 marzo 11:06:30 ERRORE: usb 1-1: impossibile impostare la configurazione, in uscita. 

Estrai tutte le linee che contengono sottostringa, usando regex

Il programma seguente è simile al programma precedente, ma utilizza il modulo re espressioni regolari. Gli errori e i numeri di riga sono memorizzati come tuple, ad esempio (lino, linea). La tupla viene creata dalle parentesi racchiudenti aggiuntive nell'istruzione errors.append () . Gli elementi della tupla sono referenziati come un elenco, con un indice a base zero tra parentesi. Come costruito qui, err [0] è un lino e err [1] è la linea associata che contiene un errore.

 import re errors = [] linoum = 0 pattern = re.compile ("error", re.IGNORECASE) # Compila un regex senza distinzione tra maiuscole e minuscole con open ('logfile.txt', 'rt') come myfile: per la riga in myfile : linenum + = 1 if pattern.search (line)! = None: # Se viene trovata una corrispondenza errors.append ((linenum, line.rstrip ('\ n'))) per errori err: # Iterate sull'elenco di tuple print ("Line" + str (err [0]) + ":" + err [1]) 

Uscita (come sopra)

 Riga 6: 28 marzo 09:10:37 Errore: impossibile contattare il server. Connessione rifiutata. Riga 10: 28 marzo 10:28:15 Errore kernel: la posizione specificata non è montata. Riga 14: 28 marzo 11:06:30 ERRORE: usb 1-1: impossibile impostare la configurazione, in uscita. 

Estrai tutte le linee contenenti un numero di telefono

Il programma qui sotto stampa qualsiasi riga di un file di testo, info.txt, che contiene un numero di telefono statunitense o internazionale. Compie questo con l'espressione regolare " (\ + \ d {1, 2})? [\ S .-]? \ D {3} [\ s .-]? \ D {4} ". Questa regex corrisponde alle seguenti notazioni del numero di telefono:

  • 123-456-7890
  • (123) 456-7890
  • 123 456 7890
  • 123.456.7890
  • +91 (123) 456-7890
 import re errors = [] linoum = 0 modello = re.compile (r "(\ + \ d {1, 2})? [\ s .-]? \ d {3} [\ s .-]? \ d {4} ") con open ('info.txt', 'rt') come myfile: per line in myfile: linenum + = 1 se pattern.search (line)! = None: # Se la ricerca di pattern trova una corrispondenza, errori .append ((linenum, line.rstrip ('\ n'))) per err in errori: print ("Line", str (err [0]), ":" + err [1]) 

Produzione

 Linea 3: il mio numero di telefono è 731.215.8881. Linea 7: puoi raggiungere il signor Walters al numero (212) 558-3131. Riga 12: La sua agente, la signora Kennedy, può essere raggiunta al +12 (123) 456-7890 Linea 14: Può anche essere contattata al numero (888) 312.8403, interno 12. 

Cerca un dizionario per parole

Il programma qui sotto cerca nel dizionario tutte le parole che iniziano con h e finiscono in pe . Per l'input, utilizza un file dizionario incluso in molti sistemi Unix, / usr / share / dict / words .

 import re filename = "/ usr / share / dict / words" pattern = re.compile (r "\ bh \ w * pe $", re.IGNORECASE) con open (nomefile, "rt") come myfile: per riga in myfile: if pattern.search (line)! = None: print (line, end = '') 

Produzione

 Spero heliotrope spero hype oroscopo hornpipe