2017-01-06 131 views
1

雖然做了一些Python的教程,這本書的作者提出以下(打開一個文件並讀取其內容):打開文件並在一行中閱讀內容?

#we could do this in one line, how? 
in_file = open(from_file) 
indata = in_file.read() 

我怎樣才能做到這一條線?

+1

爲什麼你想在一行中做到這一點?你想如何獲得數據,一個大塊'indata = open(from_file).read()'或一列行'indata = list(open(from_file))' – AChampion

+0

任何時候你打開一個文件,你應該可能使用'with'塊。看看[這篇文章](http://stackoverflow.com/a/3644618/4541045)關於爲什麼你要小心打開和關閉文件的一些解釋。 – ti7

+0

@AChampion。謝謝你非常有用。我確實需要將數據作爲一個大塊(如你所建議的)爲什麼?以便更好地學習編碼。謝謝 –

回答

1

你可以從文件處理程序中獲取文件的所有內容,方法是簡單地擴展你的路徑並從中讀取。

indata = open(from_file).read() 

但是,如果您使用的是with塊它更明顯發生了什麼,更容易擴展。

with open(from_file) as fh: # start a file handler that will close itself! 
    indata = fh.read() # get all of the contents of in_file in one go as a string 

除此之外,你應該保護你的文件打開和關閉IOErrors如果(例如)您的文件路徑不存在。

最後,文件默認情況下以只讀方式打開,如果您(或其他人以後)嘗試寫入文件,則會產生錯誤,這將保護數據塊。根據您的需要,您可以將其從'r'更改爲variety of other options

這是上述概念的一個相當完整的例子。

def get_file_contents(input_path): 
    try: 
     with open(input_path, 'r') as fh: 
      return fh.read().strip() 
    except IOError: 
     return None 
+1

'indata = None'沒有幫助,'indata'將會有一個值或將拋出一個異常 - 如果你可以優雅地處理它並捕獲異常,在那裏爲'indata'分配一個默認值。 – AChampion

+0

你是對的 - 對可能引起混淆的嘗試/異常的一半想法 - 我將刪除它並創建一個完整的示例 – ti7

+1

另外'r'模式是默認模式,所以如果有人試圖寫入它有或沒有顯式模式arg。 – AChampion