【问题标题】:Python read input lines through function callPython通过函数调用读取输入行
【发布时间】:2017-02-18 18:32:11
【问题描述】:

下面的代码可以完美地接收我的输入数据 (list.txt) 并将 2 到 5 之间的行返回到屏幕。

def get_list():

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

get_list()

但是我需要实现一些可以调用函数的东西,例如:

get_list()[2:5] 

这将在第 2 行和第 5 行之间打印。谁能建议我可以做到这一点的可能方式?谢谢!

【问题讨论】:

  • 然后从您的函数中返回整个lines 列表。
  • 您也需要关闭文件。完成后可以使用with 自动关闭文件
  • 这当然可能,但我不相信这实际上是一个明智的事情。 :)
  • 真的是说get_list()[2:5] 应该打印选定的行,还是仅仅希望它返回 那些行(例如在列表或元组中)?

标签: python file text input


【解决方案1】:

正如我在问题 cmets 中提到的,这不是明智的做法,但可以这样做。为了测试这段代码,我使用 GNU coreutils 命令seq 创建了一个包含整数 0 到 9 的文本文件:

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,我想在您开发代码时可以方便地打印(或记录)内容,以便您知道它正在做您期望它做的事情。

【讨论】:

  • 感谢您的详细解答。我知道这不是一件好事,请记住这一点。
【解决方案2】:
def get_list():

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

print(get_list()[2:5])

【讨论】:

  • @Shaikhar:此代码将打印所有行....未指定行,即 [2:5]
  • @mahendrakamble OP 需要调用该函数,然后决定打印哪些行。
  • 这确实有效,我愚蠢地打印在我的函数中,而不是“返回”该行。谢谢。
【解决方案3】:

只需返回行!

def get_list():

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

【讨论】:

  • 不过,这不会打印行。
猜你喜欢
  • 2022-08-07
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
相关资源
最近更新 更多