如何将文件的内容作为消息列表返回

时间:2015-11-05 23:15:21

标签: python

该参数表示已打开以供阅读的消息文件,每行包含一条消息。

按照文件在文件中出现的顺序,以文件的顺序读取并返回文件内容。从每一行中删除换行符。

return res.json({
    votes : ++nom.votes
});

嗯,我知道这不是正确的答案,但我不知道如何解决它。

1 个答案:

答案 0 :(得分:1)

让我们一步一步看到您的功能:

def read_messages(file):

函数read_messages只使用一个参数file;开始运作。

    message = []

让变量message成为空列表([])。

    for line in file:

对于file中的每一行,让变量line成为这样的一行。

        new_line = line.strip()

让变量new_line成为line变量,并在其开头和结尾处删除所有空格。

        message.append(new_line)

new_line附加到message

    return message

返回变量message;结束功能。

算法是正确的(为什么你说不然?),但可以简化,首先,模式......

x = []
for ...:
    something = ...
    x.append(something)
doSomething(x) # Can be `return` too

可以简化为列表理解。列表推导是一种在简单易读的表达式中构建列表的方法,无需创建列表,添加并返回列表的所有麻烦。根据之前的模式,你可以做类似的事情......

doSomething([ something for ... ])

这与上面的模式相同!现在,应用于您的代码:

return [ ??? for line in file ]

我们应该在那里放什么代替????那么,你必须把计算new_lineline.strip())的代码当然放在!这是因为new_line可以作为line.strip()的同义词,因为line.strip()没有副作用(执行line.strip()将始终给出相同的结果,无论它被调用的时间,因为line是相同的)。所以......

return [ line.strip() for line in file ]

您可以使用它,或者如果您不想在开头丢失空白,那么......

return [ line.rstrip() for line in file ]

rstrip()strip()的作用相同,只是它不会删除字符串开头的空格。

所以,你的功能变成......

def read_messages(file):
    return [ line.rstrip() for line in file ]

这完全符合您的要求,但让我们做一些更优化!

如果任何行为空,或者只包含空格,您是否希望该行进入列表?我至少没赢过。那你怎么解决这个问题呢?我会采用列表理解,并过滤掉所有空行或由空白行组成的空行。事情就变成......

import string

def read_messages(file):
    return filter(lambda x: not all(map(lambda y: y in string.whitespace, x)), [ line.rstrip() for line in file ])

现在,那是什么?首先,lambda就像一个函数,你可以在任何地方声明为一个表达式。格式为lambda parameters...: return_value。你注意到了return_value的东西吗?好吧,发生lambdas只能包含一个表达式,并且它们隐式返回该表达式。因此,例如,lambda x: x + 1是一个函数,它接受一个参数x并返回x + 1

现在,我们有三个新功能:mapfilterall

  • map(f, list):为f中的每个f(x)取一个函数x并调用list,创建另一个包含该结果的列表。它相当于[ f(x) for x in list ]
  • filter(f, list):使用函数f并从list创建一个新列表。对于x中的任何list,如果f(x)True,则x会进入新列表。否则,它被丢弃。它相当于[ x for x in list if f(x) ]
  • all(list):如果列表中的所有元素都是True,则True采用列表并返回False

最后,string.whitespace是所有空白字符的列表。

那么,这个新结构可以说是普通英语吗?当然!

  

返回一个由文件中每一行组成的新列表,如果该行不为空,并且该行中的所有字符都不是空白字符,则删除其尾部空格。