如何在Python中读取文件的每一行,并将每一行存储为列表中的元素?
我想逐行读取文件,并将每一行附加到列表的末尾。
如何在Python中读取文件的每一行,并将每一行存储为列表中的元素?
我想逐行读取文件,并将每一行附加到列表的末尾。
当前回答
参见输入和输出:
with open('filename') as f:
lines = f.readlines()
或者去掉换行符:
with open('filename') as f:
lines = [line.rstrip('\n') for line in f]
其他回答
这里还有一个选项,对文件使用列表理解;
lines = [line.rstrip() for line in open('file.txt')]
这应该是更有效的方法,因为大部分工作都是在Python解释器内完成的。
Python 3.4中引入了pathlib,它有一种非常方便的方法来从文件中读取文本,如下所示:
from pathlib import Path
p = Path('my_text_file')
lines = p.read_text().splitlines()
(splitlines调用将其从包含文件全部内容的字符串转换为文件中的行列表。)
pathlib有很多方便的地方。readtext很好,很简洁,您不必担心打开和关闭文件。如果您只需一次将文件全部读入,这是一个不错的选择。
使用此项:
import pandas as pd
data = pd.read_csv(filename) # You can also add parameters such as header, sep, etc.
array = data.values
data是一种数据帧类型,使用值获取ndarray。您还可以使用array.tolist()获取列表。
您可以按照建议简单地执行以下操作:
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()
(超人类的实现留给您作为练习)。
这对于任何文件大小都很有效,您只需一次就可以完成文件。这就是一般解析器的工作原理。
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)
你会得到同样的结果。