如何逐行读取文件到列表中?

我如何读取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

最简单的方法来做到这一点

一个简单的方法是:

  1. 以stringforms读取整个文件
  2. 按行分割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 
  1. 打开相同目录中的cmd(右键单击鼠标并selectcmd或powershell)
  2. 运行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)