如何在Python中读取大文本文件?
Python是一种开源的动态类型和解释型编程语言。读写文件是编程的一个组成部分。在Python中,使用readlines()方法读取文件。 readlines() 方法返回一个列表,其中列表中的每一项都是文件中的一个完整句子。当文件较小时,此方法很有用。由于 readlines() 方法将每一行附加到列表中,然后返回整个列表,如果文件大小非常大(以 GB 为单位),这将是耗时的。此外,该列表将消耗大量内存,如果没有足够的内存可用,这可能会导致内存泄漏。为了避免这个问题,我们可以使用文件对象作为迭代器来迭代文件并执行所需的任务。由于迭代器只是遍历整个文件,不需要任何额外的数据结构来存储数据,因此消耗的内存相对较少。此外,迭代器不执行像追加这样的昂贵操作,因此它也很省时。文件在Python中是可迭代的,因此建议使用迭代器。
以下两个程序演示了如何使用Python读取大型文本文件。
方法一:
第一种方法使用迭代器来迭代文件。在这种技术中,我们使用Python中的fileinput模块。 fileinput 模块的 input() 方法可用于读取文件。与 readlines() 相比,使用此方法的优点是 fileinput.input() 不会将整个文件加载到内存中。因此,没有内存泄漏的可能性。 fileinput.input() 方法接受一个文件名列表,如果没有传递参数,它接受来自标准输入的输入。该方法返回一个迭代器,该迭代器从正在扫描的文本文件中返回单个行。
代码实现:
Python3
# import module
import fileinput
import time
#time at the start of program is noted
start = time.time()
#keeps a track of number of lines in the file
count = 0
for lines in fileinput.input(['sample.txt']):
print(lines)
count = count + 1
#time at the end of program execution is noted
end = time.time()
#total time taken to print the file
print("Execution time in seconds: ",(end - start))
print("No. of lines printed: ",count)
Python3
import time
start = time.time()
count = 0
with open("sample.txt") as file:
for line in file:
print(line)
count = count + 1
end = time.time()
print("Execution time in seconds: ",(end-start))
print("No of lines printed: ",count)
输出:
解释:
input() 方法返回一个迭代器,它扫描整个文件并打印每一行。
方法二:
第二种方法也使用迭代器来读取文件。唯一的区别是我们将使用文件对象的迭代器。使用的方法是 open() 将整个文件包装成一个文件对象。接下来,我们使用迭代器来获取文件对象中的行。我们在“with”块中打开文件,因为它会在整个块执行时自动关闭文件。随着 with 块完成, __exit__() 方法被调用,该方法释放任何打开的资源。
代码实现:
蟒蛇3
import time
start = time.time()
count = 0
with open("sample.txt") as file:
for line in file:
print(line)
count = count + 1
end = time.time()
print("Execution time in seconds: ",(end-start))
print("No of lines printed: ",count)
输出:
解释:
这种方法所需的时间相对较少。这个程序也可以在没有块的情况下编写,但在这种情况下,我们必须确保明确关闭文件资源。