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

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


当前回答

参见输入和输出:

with open('filename') as f:
    lines = f.readlines()

或者去掉换行符:

with open('filename') as f:
    lines = [line.rstrip('\n') for line in f]

其他回答

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

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数组,其行数与文件中的行数相同。

我喜欢使用以下内容。立即阅读台词。

contents = []
for line in open(filepath, 'r').readlines():
    contents.append(line.strip())

或者使用列表理解:

contents = [line.strip() for line in open(filepath, 'r').readlines()]

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

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)

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

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

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