2009-10-27 16 views
38

yerine standardından daha Python bir dosyanın tüm satırları, okumak için bir tek satırlık var mı astar. Herhangi bir fikir?Python Dosya Slurp

+13

Komik, buna tekrar ihtiyacım vardı ve bunun için hazırladım. Asla kendi sorumu geleceğini düşünmedim :) –

+0

Ben de aslında http://stackoverflow.com/questions/1450393/how-do-you-read-from-stdin-in-python – tripleee

cevap

87

Bu Python 2.6 tek bir dize halinde yukarıda ve içerik slurp olacaktır:

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

Ve bu hatların bir listesini oluşturur:

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

Bu yaklaşımlar hemen kapanmasını garanti Giriş dosyasının hemen ardından okuma.

Dipnot:

  1. Bu yaklaşım from __future__ import with_statement kullanarak Python 2.5 kullanılabilir.

değil garanti derhal kapatılmasını yaptığı eski bir yaklaşım tek bir sicim oluşturmak için bu kullanmaktır:

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

Ve bu hatların bir liste oluşturmak için:

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

Pratikte, CPython'un bazı versiyonlarında derhal kapatılacak, ancak "sadece çöp olduğunda toplayıcı, "Jython, IronPython ve muhtemelen CPython'un gelecekteki bir sürümünde." Eğer Python3 iseniz

+0

Tahmin ettiğim şey buydu, ancak açılan dosyanın ne zaman kapatılacağını bilmiyordu. Teşekkürler! –

-1

, düzgün dosyanın giriş kodlamasını, ör .:

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

Python3 codec list yılında codec'i adlarının listesini bulun saygı emin olun. (Ayrıca ASCII olmayan herhangi bir giriş beklediğinizde mekanizma Python2 için de önerilir)

+0

Bunun neden reddedildiğini bilmek istiyorum. –

+2

Bazı kişiler kodlama konusunu konu dışı olarak kabul edebilir. Ayrıca, kodum asgari düzeyde değil: builtin'open özelliğini kullanarak 'open (filename,' r ', encoding =' utf8 ') 'i kullanarak import deyimini kurtarabilir ve cevabı bu soruya daha uygun hale getirebilir. –