2009-10-27 4 views
38

Esiste un one-liner per leggere tutte le righe di un file in Python, piuttosto che lo standard:Python File Slurp

f = open('x.txt') 
cts = f.read() 
f.close() 

Sembra che questo è fatto così spesso che ci deve essere un one liner. Qualche idea?

+13

Divertente, avevo bisogno di nuovo e ho cercato su Google. Non ho mai pensato che sarebbe sorta la mia domanda :) –

+0

Continuo a trovarlo anche quando sto cercando http://stackoverflow.com/questions/1450393/how-do-you-read-from-stdin-in-python – tripleee

risposta

87

Ciò trangugiare il contenuto in una singola stringa in Python 2.6 e soprattutto:

with open('x.txt') as x: f = x.read() 

E questo creerà un elenco di linee:

with open('x.txt') as x: f = x.readlines() 

Questi approcci garantiscono chiusura immediata del file di input subito dopo la lettura.

Nota:

  1. Questo approccio può essere utilizzato anche in Python 2.5 utilizzando from __future__ import with_statement.

Un approccio vecchio che non garanzia chiusura immediata è quella di utilizzare questo per creare una singola stringa:

f = open('x.txt').read() 

E questo per creare un elenco di linee:

f = open('x.txt').readlines() 

In pratica verrà immediatamente chiuso in alcune versioni di CPython, ma chiuso "solo quando la spazzatura il collezionista fa il giro "su Jython, IronPython e probabilmente su una futura versione di CPython.

+0

Questo è quello che avrei immaginato, ma non sapevo quando il file aperto sarebbe stato chiuso. Grazie! –

-1

Se siete su python3, assicurarsi di rispettare correttamente la codifica in ingresso del file, ad es .:

import codecs 
with codecs.open(filename, 'r', encoding="utf8") as file: 
    cts = file.read() 

Trova l'elenco dei nomi di codec nel Python3 codec list. (Il meccanismo è consigliabile anche per Python2 ogni volta che si prevede un input non ASCII)

+0

Vorrei sapere perché questo è stato votato. –

+2

Alcune persone potrebbero considerare il problema della codifica off-topic. Inoltre, il mio codice non è minimale: l'uso di builtin'open' come in 'open (filename, 'r', encoding = 'utf8')' salverebbe l'istruzione import e renderebbe la risposta più adatta alla domanda. –