2012-02-16 64 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