如何在Python中读取文件的每一行,并将每一行存储为列表中的元素?
我想逐行读取文件,并将每一行附加到列表的末尾。
如何在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
在输出中,您将看到行列表。