2012-02-16 65 views
1

我有這個簡單的代碼:如何使用readline方法?

from sys import argv 


script, input_file = argv 

def fma(f): 
    f.readline() 



current_file = open(input_file) 


fma(current_file) 

txt文件的內容是: 「

Hello this is a test.\n 
I like cheese and macaroni.\n 
I love to drink juice.\n 
\n 
\n 

我把\ n個字符,所以你知道我打在我的文本編輯器中輸入。

我想要完成的是獲取每一行和每個\ n字符。

問題是,當運行腳本時,我什麼也沒有回來。我做錯了什麼,以及如何修復它以便像我上面所述那樣運行?

回答

1

很肯定你真正想要的是f.readlines,不f.readline

# module start 
from __future__ import with_statement # for python 2.5 and earlier 

def readfile(path): 
    with open(path) as src: 
     return src.readlines() 

if __name__ == '__main__': 
    import sys 
    print readfile(sys.argv[1]) 
# module end 

請注意,我用的是with上下文管理,以更有效地打開文件(它關閉該文件爲你的工作)。在Python 2.6和更高版本中,您不需要頂部的幻想導入語句來使用它,但是我有一個習慣,將其包含在仍然使用較舊Python的任何人中。

+0

我從這裏閱讀:http://docs.python.org/tutorial/inputoutput.html如果你看看f.readline(),你可以看到以下示例:>>> f.readline() '這是文件的第一行。\ n' >>> f.readline() '文件的第二行\ n' >>> f 。readline() ''您的回覆非常有幫助,但會返回一個列表。我想完全像上面的f.readlines那樣返回每行的示例,即使某些行可能只有\ n字符。 – 0101amt 2012-02-16 20:41:24

+1

是的,我知道......只是使用f.readline實際上很不尋常......這實際上是很久以前的延期。事實上,f.readlines也是如此。現在做到這一點的正確方法是將open(path,mode)作爲src **語句使用(以便正確處理文件關閉並避免內存泄漏),並簡單地迭代src對象以獲取每個對象連續行。 – michaelfilms 2012-02-16 20:46:38

+0

哇!感謝回覆如此之快,幫助我。 – 0101amt 2012-02-16 20:55:23

2

你的函數讀取線,但確實與它無關:

def fma(f): 
    f.readline() 

你需要返回的字符串f.readline()給你。請記住,在交互式提示中,所產生的最後一個值是自動打印的,但這不是.py文件中Python代碼的工作原理。

1
def fma(f): 
    f.readline() 

f.readline()是一個函數,它返回一個值,它是在這種情況下,從文件中的一行,你需要「做」一些與這樣的價值:

def fma(f): 
    print f.readline() 
1

你的功能不返回任何東西

def fma(f): 
    data = f.readline() 
    return data 

f.readline()從文件中讀取一行;一個換行符(\ n)留在字符串的末尾,並且如果該文件不以換行符結束,則僅在文件的最後一行中省略換行符(\ n)。

1

腳本應該如下:

from sys import argv 
script, input_file = argv 

def fma(f): 
    line = f.readline() 
    return line 

current_file = open(input_file) 
print fma(current_file) 
+0

這究竟有何幫助?現在值從fma返回,然後沒有任何反應。 – 2012-02-16 00:18:44

+0

它被返回到一個變量。我現在打印它,只是假裝我做了更多的事情;) – Morlock 2012-02-16 12:52:24