如何在Python中读取文件的每一行,并将每一行存储为列表中的元素?

我想逐行读取文件,并将每一行附加到列表的末尾。


当前回答

最简单的方法

一个简单的方法是:

将整个文件作为字符串读取逐行拆分字符串

在一行中,这将给出:

lines = open('C:/path/file.txt').read().splitlines()

然而,这是一种非常低效的方式,因为这将在内存中存储两个版本的内容(对于小文件来说可能不是大问题,但仍然如此)。[谢谢Mark Amery]。

有两种更简单的方法:

将文件用作迭代器

lines = list(open('C:/path/file.txt'))
# ... or if you want to have a list without EOL characters
lines = [l.rstrip() for l in open('C:/path/file.txt')]

如果您使用的是Python 3.4或更高版本,最好使用pathlib为文件创建一个路径,该路径可以用于程序中的其他操作:

from pathlib import Path
file_path = Path("C:/path/file.txt") 
lines = file_path.read_text().split_lines()
# ... or ... 
lines = [l.rstrip() for l in file_path.open()]

其他回答

您可以按照建议简单地执行以下操作:

with open('/your/path/file') as f:
    my_lines = f.readlines()

请注意,这种方法有两个缺点:

1) 你把所有的行都存储在内存中。在一般情况下,这是一个非常糟糕的主意。文件可能非常大,内存可能会用完。即使它不大,也只是在浪费内存。

2) 这不允许在读取每行时对其进行处理。因此,如果在这之后处理行,则效率不高(需要两次而不是一次)。

对于一般情况,更好的方法如下:

with open('/your/path/file') as f:
    for line in f:
        process(line)

您可以任意定义流程函数。例如:

def process(line):
    if 'save the world' in line.lower():
         superman.save_the_world()

(超人类的实现留给您作为练习)。

这对于任何文件大小都很有效,您只需一次就可以完成文件。这就是一般解析器的工作原理。

另一个选项是numpy.genfromttxt,例如:

import numpy as np
data = np.genfromtxt("yourfile.dat",delimiter="\n")

这将使数据成为一个NumPy数组,其行数与文件中的行数相同。

如果您想从命令行或stdin读取文件,也可以使用fileinput模块:

# reader.py
import fileinput

content = []
for line in fileinput.input():
    content.append(line.strip())

fileinput.close()

将文件传递给它,如下所示:

$ python reader.py textfile.txt 

在此处阅读更多信息:http://docs.python.org/2/library/fileinput.html

f = open("your_file.txt",'r')
out = f.readlines() # will append in the list out

现在,变量out是您想要的列表(数组)。您可以选择:

for line in out:
    print (line)

Or:

for line in f:
    print (line)

你会得到同样的结果。

只需使用splitline()函数。这里有一个例子。

inp = "file.txt"
data = open(inp)
dat = data.read()
lst = dat.splitlines()
print lst
# print(lst) # for python 3

在输出中,您将看到行列表。