如何在Python中读取文件的每一行,并将每一行存储为列表中的元素?
我想逐行读取文件,并将每一行附加到列表的末尾。
如何在Python中读取文件的每一行,并将每一行存储为列表中的元素?
我想逐行读取文件,并将每一行附加到列表的末尾。
当前回答
根据Python的文件对象方法,将文本文件转换为列表的最简单方法是:
with open('file.txt') as f:
my_list = list(f)
# my_list = [x.rstrip() for x in f] # remove line breaks
演示
如果只需要遍历文本文件行,可以使用:
with open('file.txt') as f:
for line in f:
...
旧答案:
使用with和readline():
with open('file.txt') as f:
lines = f.readlines()
如果您不关心关闭文件,这一行程序将起作用:
lines = open('file.txt').readlines()
传统方式:
f = open('file.txt') # Open file on read mode
lines = f.read().splitlines() # List with stripped line-breaks
f.close() # Close file
其他回答
这比必要的更明确,但可以做到你想要的。
with open("file.txt") as file_in:
lines = []
for line in file_in:
lines.append(line)
我会尝试下面提到的方法之一。我使用的示例文件名为dummy.txt。您可以在此处找到该文件。我假设该文件与代码位于同一目录中(您可以更改fpath以包含正确的文件名和文件夹路径)。
在下面提到的两个示例中,lst给出了您想要的列表。
1.第一种方法
fpath = 'dummy.txt'
with open(fpath, "r") as f: lst = [line.rstrip('\n \t') for line in f]
print lst
>>>['THIS IS LINE1.', 'THIS IS LINE2.', 'THIS IS LINE3.', 'THIS IS LINE4.']
2.在第二种方法中,可以使用Python标准库中的csv.reader模块:
import csv
fpath = 'dummy.txt'
with open(fpath) as csv_file:
csv_reader = csv.reader(csv_file, delimiter=' ')
lst = [row[0] for row in csv_reader]
print lst
>>>['THIS IS LINE1.', 'THIS IS LINE2.', 'THIS IS LINE3.', 'THIS IS LINE4.']
您可以使用这两种方法之一。两种方法创建lst所需的时间几乎相等。
最简单的方法
一个简单的方法是:
将整个文件作为字符串读取逐行拆分字符串
在一行中,这将给出:
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()]
另一个选项是numpy.genfromttxt,例如:
import numpy as np
data = np.genfromtxt("yourfile.dat",delimiter="\n")
这将使数据成为一个NumPy数组,其行数与文件中的行数相同。
Python 3.4中引入了pathlib,它有一种非常方便的方法来从文件中读取文本,如下所示:
from pathlib import Path
p = Path('my_text_file')
lines = p.read_text().splitlines()
(splitlines调用将其从包含文件全部内容的字符串转换为文件中的行列表。)
pathlib有很多方便的地方。readtext很好,很简洁,您不必担心打开和关闭文件。如果您只需一次将文件全部读入,这是一个不错的选择。