如何逐行读取文件到列表中?
我如何读取Python中的每一行文件,并将每行作为一个元素存储在列表中?
我想逐行阅读文件,并将每行添加到列表的末尾。
with open(fname) as f: content = f.readlines() # you may also want to remove whitespace characters like `\n` at the end of each line content = [x.strip() for x in content]
我猜你的意思是list
而不是数组。
请参阅input和输出 :
with open('filename') as f: lines = f.readlines()
或者剥离换行符:
lines = [line.rstrip('\n') for line in open('filename')]
编者按:Janus Troelsen的评论暗示了这个答案的原始whitespace-stripping命令, line.strip()
将删除所有前导和尾随空白,而不仅仅是尾随的\n
。
这比必要的更明确,但是做你想要的。
with open("file.txt", "r") as ins: array = [] for line in ins: array.append(line)
这将从文件中产生一个“数组”行。
lines = tuple(open(filename, 'r'))
如果你想\n
纳入:
with open(fname) as f: content = f.readlines()
如果你不想要\n
包括:
with open(fname) as f: content = f.read().splitlines()
你可以简单地做如下的build议:
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)
您可以以任何方式定义您的过程function。 例如:
def process(line): if 'save the world' in line.lower(): superman.save_the_world()
( Superman
课程的实施留给你练习)。
这将很好地适用于任何文件大小,你只需要通过你的文件。 这通常是通用parsing器的工作原理。
如果你不关心closures文件,这个单行工作:
lines = open('file.txt').read().split("\n")
传统的方式:
fp = open('file.txt') # open file on read mode lines = fp.read().split("\n") # create a list containing all lines fp.close() # close file
使用(推荐):
with open('file.txt') as fp: lines = fp.read().split("\n")
这应该封装打开的命令。
array = [] with open("file.txt", "r") as f: for line in f: array.append(line)
清理和Python的方式阅读文件的行列表
首先,你应该专注于打开你的文件,并以一种高效的pythonic方式阅读它的内容。 这是我个人不喜欢的方式的一个例子:
infile = open('my_file.txt', 'r') # Open the file for reading. data = infile.read() # Read the contents of the file. infile.close() # Close the file since we're done using it.
相反,我更喜欢下面的方法来打开文件,因为它是非常干净的,并且在完成使用后不需要closures文件。 在下面的声明中,我们打开文件进行阅读,并将其分配给variables“infile”。 一旦这个语句中的代码完成运行,文件将被自动closures。
# Open the file for reading. with open('my_file.txt', 'r') as infile: data = infile.read() # Read the contents of the file into memory.
现在我们需要把重点放在Python列表中,因为它们是可迭代的,高效的和灵活的。 在你的情况下,预期的目标是把文本文件的每一行放入一个单独的元素。 要做到这一点,我们将使用splitlines()方法,如下所示:
# Return a list of the lines, breaking at line boundaries. my_list = data.splitlines()
最终产品:
# Open the file for reading. with open('my_file.txt', 'r') as infile: data = infile.read() # Read the contents of the file into memory. # Return a list of the lines, breaking at line boundaries. my_list = data.splitlines()
testing我们的代码:
- 文本文件的内容:
A fost odatã ca-n povesti, A fost ca niciodatã, Din rude mãri împãrãtesti, O prea frumoasã fatã.
- 打印报表用于testing目的:
print my_list # Print the list. # Print each line in the list. for line in my_list: print line # Print the fourth element in this list. print my_list[3]
- 输出(因unicode字符而异):
['A fost odat\xc3\xa3 ca-n povesti,', 'A fost ca niciodat\xc3\xa3,', 'Din rude m\xc3\xa3ri \xc3\xaemp\xc3\xa3r\xc3\xa3testi,', 'O prea frumoas\xc3\xa3 fat\xc3\xa3.'] A fost odatã ca-n povesti, A fost ca niciodatã, Din rude mãri împãrãtesti, O prea frumoasã fatã. O prea frumoasã fatã.
我会这样做。
lines = [] with open("myfile.txt") as f: for line in f: lines.append(line)
另一个选项是numpy.genfromtxt
,例如:
import numpy as np data = np.genfromtxt("yourfile.dat",delimiter="\n")
这将使data
成为NumPy数组,其行数与文件中的数量相同。
通过对文件使用列表推导还有一个选项。
lines = [line.rstrip() for line in open('file.txt')]
这应该是更有效的方式,因为大部分工作是在Python解释器内完成的。
如果您想从命令行或标准input读取文件,也可以使用fileinput
模块:
# reader.py import fileinput content = [] for line in fileinput.input(): content.append(line.strip()) fileinput.close()
将文件传递给它就像这样:
$ python reader.py textfile.txt
在这里阅读更多: http : //docs.python.org/2/library/fileinput.html
最简单的方法来做到这一点
一个简单的方法是:
- 以stringforms读取整个文件
- 按行分割string
一行,这将会给:
lines = open('C:/path/file.txt').read().splitlines()
f = open("your_file.txt",'r') out = f.readlines() # will append in the list out
现在变出是一个你想要的列表(数组)。 你可以做:
for line in out: print line
要么
for line in f: print line
你会得到相同的结果。
只需使用splitlines()函数。 这是一个例子。
inp = file.txt data = open(inp) dat = data.read() lst = dat.splitlines() print lst
在输出中你将有行的列表。
一个简单的方法:
with open(file) as g: stuff = g.readlines()
如果你想使它成为一个完整的程序,请input:
import time file = raw_input ("Enter EXACT file name: ") with open(file) as g: stuff = g.readlines() print (stuff) exit = raw_input("Press enter when you are done.")
由于某些原因,它不能正确读取.py文件。
数据到列表中
让我们从文本文件中读取数据
文本文件内容:
line number one of the txt file line number two of the txt file line number three of the txt file
- 打开相同目录中的cmd(右键单击鼠标并selectcmd或powershell)
- 运行python并在解释器中写入:
python脚本
with open("myfile.txt", encoding="utf-8") as file: my_list = file.readlines()
用strip()方法去掉每行末尾的“\ n”字符
my_list = [x.strip() for x in my_list]
打印列表的项目
for rows in my_list: print(rows) ...
产量
line number one of the txt file line number two of the txt file line number three of the txt file
如果你想面对一个非常大的/巨大的文件,并且想要更快地读取 (想象你在Topcoder / Hackerrank编码竞争中),你可能一次读更大的一行到一个内存缓冲区,而不是只是在文件级别逐行迭代。
buffersize = 2**16 with open(path) as f: while True: lines_buffer = f.readlines(buffersize) if not lines_buffer: break for line in lines_buffer: process(line)
据我所知,Python没有一个本地数组数据结构。 但它确实支持比数组简单得多的列表数据结构。
array = [] #declaring a list with name '**array**' with open(PATH,'r') as reader : for line in reader : array.append(line)
你可以打开你的文件阅读使用
file1=open("filename","r") and for reading use lines=file1.readlines()
列表行将包含所有行作为单独的元素,您可以使用lines["linenumber-1"]
调用特定的元素,因为python从0开始计数。
用这个:
import pandas as pd data = pd.read_csv(filename) # You can also add parameters such as header, sep, etc. array = data.values
data
是一个dataframetypes,并使用值来获得ndarray。 你也可以使用array.tolist()
获取一个列表。
也可以在numpy中使用loadtxt命令。 这比genfromtxt检查更less的条件,所以它可能会更快。
import numpy data = numpy.loadtxt(filename,delimiter="\n")
您可以通过以下代码轻松完成:
lines = open(filePath).readlines()
命令行版本
#!/bin/python3 import os import sys abspath = os.path.abspath(__file__) dname = os.path.dirname(abspath) filename = dname + sys.argv[1] arr = open(filename).read().split("\n") print(arr)
运行:
python3 somefile.py input_file_name.txt
lines = list(open("dict.lst", "r")) linesSanitized = map(lambda each:each.strip("\n"), lines) print linesSanitized
with open(fname) as fo: data=fo.read().replace('\n', ' ').replace (',', ' ')
这应该回答你的问题。 replace函数将作为分隔符来剥离文件。
textFile = open("E:\Values.txt","r") textFileLines = textFile.readlines()
“textFileLines”是你想要的数组
怎么样:
fp = open("filename") content = fp.read(); lines = content.split("\n")
声明一个类Unix的方法:
def cat(filename): with open(filename) as f: return f.read().decode('utf-8')
只需调用它来获取文件内容。
content = cat(filename)