2016-10-10 64 views
1

我的下面的代码完美地接收我的输入数据(list.txt)并返回2到5之间的行到屏幕上。Python通过函数调用读取输入行

def get_list(): 

    file = open('list.txt', 'r') 
    lines = file.read().splitlines()[2:5] 
    print (lines) 

get_list() 

但是我需要实现的东西,我可以调用的功能等:

get_list()[2:5] 

,这将线2和5之间,而不是打印。任何人都可以提出一个可行的方法,我可以做到这一点?谢谢!

+0

然后从你的函数返回整个'lines'列表。 – Phylogenesis

+0

你也想关闭你的文件。你可以使用'with'在你完成后自动关闭文件 –

+0

这当然是_possible_,但我不相信它确实是一个可以做的事情。 :) –

回答

1

正如我在问题的评论中提到,这是不是一个明智的做法,但这里的它是如何完成的。为了测试这个代码,我创建了一个包含整数0到9的文本文件,使用GNU的coreutils命令seq

seq 0 9 >list.txt 

而这里的Python代码:

class AutoPrint(object): 
    def __init__(self, data): 
     self.data = data 

    def __getitem__(self, idx): 
     for row in self.data[idx]: 
      print(row) 

def get_list(fname): 
    with open('list.txt') as f: 
     data = f.read().splitlines() 
    return AutoPrint(data) 

get_list('list.txt')[2:5] 

输出

2 
3 
4 

但是不要在真正的代码中这样疯狂的东西!我的__getitem__方法返回None;一个合适的__getitem__应该返回选定的项目。它不应该有像印刷材料那样的疯狂的副作用。 OTOH,我想当你开发代码时,它可以可以打印(或记录)东西,以便你知道它正在做你期望的事情。

+0

谢谢你的详细解答。我明白这不是一件好事,会记住这一点。 – StackMeUp123

0

只需返回行!

def get_list(): 

    file = open('list.txt', 'r') 
    lines = file.read().splitlines() 
    return lines 
+0

虽然不会打印这些行。 –

1
def get_list(): 

    with open('list.txt', 'r') as file: 
     lines = file.read().splitlines() 
    return lines 

print(get_list()[2:5]) 
+0

@Shaikhar:此代码将打印所有行....未指定行,即[2:5] –

+0

@mahendrakamble OP需要调用该函数,然后决定要打印哪些行。 –

+0

这个工作,我愚蠢地打印在我的功能,而不是“返回”线。谢谢。 – StackMeUp123