2009-10-27 3 views
38

Есть один лайнер, чтобы прочитать все строки файла в Python, а не стандарт:Python файла Slurp

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

Похоже, это сделано так часто, что там должен быть один- вкладыш. Есть идеи?

+13

Забавно, мне нужно было это снова, и я искал его. Никогда не думал, что мой собственный вопрос возникнет :) –

+0

Я также продолжаю нахожу это, когда я действительно ищу http://stackoverflow.com/questions/1450393/how-do-you-read-from-stdin-in-python – tripleee

ответ

87

Это будет чавкать содержимое в одну строку в Python 2.6 и выше:

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

И это создаст список строк:

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

Эти подходы гарантировать немедленное закрытие входного файла сразу после чтения.

Сноска:

  1. Этот подход также может быть использован в Python 2.5 с помощью from __future__ import with_statement.

Старшего подход не гарантии немедленного закрытия является использовать это, чтобы создать одну строку:

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

И это, чтобы создать список строк:

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

На практике он будет немедленно закрыт в некоторых версиях CPython, но закрыт «только когда мусор коллекционер обходит его "в Jython, IronPython и, возможно, в будущей версии CPython.

+0

Это то, что я бы догадался, но не знал, когда открытый файл будет закрыт. Благодаря! –

-1

Если вы на Python3, убедитесь, что вы правильно соблюдать входную кодировку вашего файла и т.д .:

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

Найти список кодеков имен в Python3 codec list. (Механизм также рекомендуется для Python2 всякий раз, когда вы ожидаете какой-либо вход, не содержащий ASCII)

+0

Я хотел бы знать, почему это отклонено. –

+2

Некоторые люди могут считать проблему кодирования не по теме. Кроме того, мой код не минимален: использование встроенного '' '' в 'open (filename, 'r', encoding = 'utf8')' будет сохранять оператор импорта и лучше отвечать на вопрос. –

Смежные вопросы