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

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


当前回答

如果要包含以下内容:

with open(fname) as f:
    content = f.readlines()

如果不希望包含:

with open(fname) as f:
    content = f.read().splitlines()

其他回答

具有文本文件内容:

line 1
line 2
line 3

我们可以在上面txt的同一目录中使用此Python脚本

>>> with open("myfile.txt", encoding="utf-8") as file:
...     x = [l.rstrip("\n") for l in file]
>>> x
['line 1','line 2','line 3']

使用追加:

x = []
with open("myfile.txt") as file:
    for l in file:
        x.append(l.strip())

Or:

>>> x = open("myfile.txt").read().splitlines()
>>> x
['line 1', 'line 2', 'line 3']

Or:

>>> x = open("myfile.txt").readlines()
>>> x
['linea 1\n', 'line 2\n', 'line 3\n']

Or:

def print_output(lines_in_textfile):
    print("lines_in_textfile =", lines_in_textfile)

y = [x.rstrip() for x in open("001.txt")]
print_output(y)

with open('001.txt', 'r', encoding='utf-8') as file:
    file = file.read().splitlines()
    print_output(file)

with open('001.txt', 'r', encoding='utf-8') as file:
    file = [x.rstrip("\n") for x in file]
    print_output(file)

输出:

lines_in_textfile = ['line 1', 'line 2', 'line 3']
lines_in_textfile = ['line 1', 'line 2', 'line 3']
lines_in_textfile = ['line 1', 'line 2', 'line 3']

最简单的方法

一个简单的方法是:

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

在一行中,这将给出:

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()]

最简单的方法是:

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实现,文件都会被关闭。

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

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()

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

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

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

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

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