2014-10-29 72 views
-1

爲什麼在Python做一個調用這個函數的結果輸出:簡單的讀檔問題

['54044', '14108', '79294', '29649'] 
[''] 
[''] 

函數被調用以這種方式:

的功能
print read_file(FILENAME) 

代碼:

def read_file(filename): 
""" 
Reads in the file and returns a unsorted list of all the numbers in the file. 
""" 
file = open(filename) 

# Why don't these 2 do the same thing? 
print file.read().split('\r\n') 
print file.read().split('\r\n') 

numbers = file.read().split("\r\n") 
file.close() 

return numbers 

作爲一個旁註,要得到我需要使用轉義序列\ r和\ n分割文件的數字。對於在文件中連續使用這兩個轉義序列的人有沒有任何推理,而不僅僅是\ n? (該文件具有需要以特定方式排列的1000個數字的列表)

+0

那是究竟如何你的程序的外觀?因爲'read_file'下的縮進不正確。 – RPGillespie 2014-10-29 15:36:15

回答

3

當你打開一個文件時,你會得到一個記錄它在文件中當前位置的對象。所以當你做f.read()時,你到達最後:read()的後續調用不會返回任何內容,因爲沒有更多內容。

您可以通過執行f.seek(0)或重新打開文件來重置您的位置。

1

因爲file.read在讀取文件時取得進展。你閱讀整個文件,永遠不會返回。 (假設壓痕實際上是確定)。

Documentation:

要讀取文件內容,需要調用f.read(大小),讀取若干數量的數據並返回一個字符串。大小是可選的數字參數。 如果大小被忽略或爲負數,文件的全部內容將被讀取並返回;如果文件的大小是機器內存的兩倍,那麼這是您的問題。否則,讀取並返回最多大小的字節。 如果已經到達文件末尾,f.read()將返回一個空字符串(「」)。

1

該文件正在順序讀取,所以第一次調用file.read()從文件的開頭讀取。第二個調用嘗試從前一個完成的地方讀取,這是文件的結尾,因此沒有內容。

1

當文件處理,這是通常更Python,因爲它處理自動關閉文件使用with塊:

def read_file(filename): 
    """ 
    Reads in the file and returns a unsorted list of all the numbers in the file. 
    """ 
    with open(filename, "r") as f: 
     numbers = f.read().split('\r\n') 

    return numbers