Copia da un file di testo ad un altro utilizzando Python

Vorrei copiare alcune righe di testo da un file di testo ad un altro. Nel mio script corrente quando faccio la ricerca di una stringa si copia tutto, poi, come posso copiare solo una parte del testo? E. g. solo copiare le righe quando si è “test/file/myword” in esso?

attuale codice:

#!/usr/bin/env python
f = open('list1.txt')
f1 = open('output.txt', 'a')

doIHaveToCopyTheLine=False

for line in f.readlines():

    if 'tests/file/myword' in line:
        doIHaveToCopyTheLine=True

    if doIHaveToCopyTheLine:
        f1.write(line)

f1.close()
f.close()
  • non abbiate paura di bandiera a queste domande, come di bassa qualità.
  • o.. meglio ancora… è sufficiente fare clic edit.
  • Il problema con il codice: è necessario reimpostare la bandiera a ogni iterazione del ciclo.
InformationsquelleAutor DevCon | 2013-03-11

 

7 Replies
  1. 62

    Il oneliner:

    open("out1.txt", "w").writelines([l for l in open("in.txt").readlines() if "tests/file/myword" in l])

    Raccomandato con with:

    with open("in.txt") as f:
        lines = f.readlines()
        lines = [l for l in lines if "ROW" in l]
        with open("out.txt", "w") as f1:
            f1.writelines(lines)

    Minore utilizzo di memoria:

    with open("in.txt") as f:
        with open("out.txt", "w") as f1:
            for line in f:
                if "ROW" in line:
                    f1.write(line) 
    • cool! che odore funzionale al 101% 🙂
    • grazie per il codice e spiegare il problema.
    • Pollice in giù per me… questo codice crea una seconda lista prima di scrivere. La sua non è scalabile. Né readlines (), né un elenco di comprensione della creazione di un secondo elenco dovrebbe essere usato.
    • Aggiornato risposta…
    • Mi piace che il fix!
    • fare questi codici chiudere il file? Specialmente nel primo codice non so come vedere i file per la chiusura!!!
    • Il file verrà automaticamente chiuso a meno che non vi è un’eccezione. Utilizzando with, il file verrà chiuso anche quando ci sono delle eccezioni.
    • grazie per la spiegazione.
    • Ciao, che cosa è la “RIGA”. Che cosa succede se togliamo la condizione if con riga e scrivere direttamente il file?
    • Si prega di leggere la domanda. Op sta cercando di copiare solo linee specifiche.

  2. 7

    Solo leggermente ripulito modo di fare questo. Questo è più o meno efficaci ATOzTOA la risposta, ma non c’è motivo di fare due distinti con le dichiarazioni.

    with open(path_1, 'a') as file_1, open(path_2, 'r') as file_2:
        for line in file_2:
            if 'tests/file/myword' in line:
                file_1.write(line)
  3. 6

    readlines() si legge l’intero file di input in un elenco e non è un buon esecutore. È sufficiente scorrere le righe del file. Ho usato ‘con’ su output.txt in modo che si chiuda automaticamente quando fatto. Non è necessario su ‘list1.txt’ perché sarà chiuso quando il ciclo finisce.

    #!/usr/bin/env python
    with open('output.txt', 'a') as f1:
        for line in open('list1.txt'):
            if 'tests/file/myword' in line:
                f1.write(line)
  4. 1
    f=open('list1.txt')  
    f1=open('output.txt','a')
    for x in f.readlines():
        f1.write(x)
    f.close()
    f1.close()

    questo funzionerà al 100% provare per una volta

  5. 0

    Sicuro e memoria-risparmio:

    with open("out1.txt", "w") as fw, open("in.txt","r") as fr: 
        fw.writelines(l for l in fr if "tests/file/myword" in l)

    Non creare temporanei liste (cosa readline e [] vorresti fare, che è un non-starter se il file è enorme), il tutto è fatto con generatore di genericità, e l’utilizzo di with blocchi di garantire che i file sono chiuso in uscita.

  6. 0

    con open(“list1.txt”) come f:
    doIHaveToCopyTheLine = False
    “‘aprire il file di output in modalità di scrittura”‘
    con open(“output.txt”, ‘w’) f1:
    “‘scorrere riga per riga”‘
    per la linea in f:
    se “test/file/myword’ in linea:
    doIHaveToCopyTheLine = True
    elif doIHaveToCopyTheLine:
    f1.scrivere(linea)

    f1.close()
    f.close()

  7. -1
    f = open('list1.txt')
    f1 = open('output.txt', 'a')
    
    # doIHaveToCopyTheLine=False
    
    for line in f.readlines():
        if 'tests/file/myword' in line:
            f1.write(line)
    
    f1.close()
    f.close()

    Ora Il codice funziona. Provate Questo.

Lascia un commento