关于python:使用WITH语句生成文本文件中所有行的列表

Generating a list of all the lines in a text file using the with statement

本问题已经有最佳答案,请猛点这里访问。

我知道你可以用一行"x for x in y"样式的循环填充列表,可以用它来填充吗?

我试图把文本文件中的所有行都拉到一个列表中,但它似乎不起作用,至少不像我尝试的那样。

我试过:

1
lines = [ x with open("text.txt").readlines() as x]

1
lines = [ x.readlines() with open("text.txt") as x]

它似乎使用了相同的格式,但给了我一个无效的语法错误。我很感激我可以用for来完成它,但我想把使用close()的工作留下来。

这是可能的还是我抓住了稻草?顺便说一下,这是python 2。


当这条线路工作时:

1
with open('file.txt') as fobj: lines = list(fobj)

使用with和pythonic语法,您需要两行:

1
2
with open('file.txt') as fobj:
    lines = list(fobj)

这里,fobj是一个迭代器,它允许高效的逐行迭代。用list(fob将其转换成列表与fobj.readlines()具有相同的效果。


with是一个上下文管理器,不能放在一行中。正如BDFL曾经说过的,"为什么我们需要节省线路?我们不是Perl。"(如中所述,不,我们不需要保存行。)

你可以分为两种:

1
2
with open("text.txt","r") as x:
    lines = x.readlines()


理解只能使用for语句,不能使用with语句。你只能这样做(没有理由不这样做)

1
2
with open("text.txt") as x:
    lines = x.readlines()

1
lines = open("test.txt").readlines()

这里不需要使用列表理解,而且不管怎样,当您完成后文件不会保持打开状态。

顺便说一句,如果你需要的话,它可以和列表理解结合起来,比如:

1
lines = [l.strip() for l in open("test.txt").readlines()]