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

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


当前回答

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

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

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

其他回答

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

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

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

如果文档中也有空行,我希望读取内容并将其通过过滤器以防止空字符串元素

with open(myFile, "r") as f:
    excludeFileContent = list(filter(None, f.read().splitlines()))

这段代码将把整个文件读入内存,并删除每行末尾的所有空白字符(换行符和空格):

with open(filename) as file:
    lines = [line.rstrip() for line in file]

如果您正在处理一个大文件,那么您应该逐行读取并处理它:

with open(filename) as file:
    for line in file:
        print(line.rstrip())

在Python 3.8及以上版本中,可以使用while循环和walrus运算符,如下所示:

with open(filename) as file:
    while (line := file.readline().rstrip()):
        print(line)

根据您计划对文件执行的操作以及文件的编码方式,您可能还需要手动设置访问模式和字符编码:

with open(filename, 'r', encoding='UTF-8') as file:
    while (line := file.readline().rstrip()):
        print(line)

最简单的方法是:

lines = list(open('filename'))

or

lines = tuple(open('filename'))

or

lines = set(open('filename'))

在set的情况下,我们必须记住,我们没有保留行顺序,并删除重复的行。

下面我添加了@MarkAmery的一个重要补充:

由于您既没有在文件对象上调用.close,也没有使用with语句,因此在某些Python实现中,文件在读取后可能不会关闭,您的进程将泄漏打开的文件句柄。在CPython(大多数人使用的普通Python实现)中,这不是问题,因为文件对象将立即被垃圾收集,这将关闭文件,但通常认为最好的做法是:

with open('filename') as f: lines = list(f) 

以确保无论您使用的是什么Python实现,文件都会被关闭。

如果您想从命令行或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