如何在 Python 中读取大文本文件
Python 是一种开源的动态类型和解释型编程语言。读写文件是编程的一个组成部分。在 Python 中,使用 readlines() 方法读取文件。readlines() 方法返回一个列表,其中列表中的每一项都是文件中的一个完整句子。当文件较小时,此方法很有用。由于 readlines() 方法将每一行附加到列表中,然后返回整个列表,如果文件大小非常大,比如以 GB 为单位,这将非常耗时。此外,该列表将消耗大量内存,如果没有足够的内存,可能会导致内存泄漏。为了避免这个问题,我们可以使用文件对象作为迭代器来迭代文件并执行所需的任务。由于迭代器只是对整个文件进行迭代,不需要任何额外的数据结构来存储数据,因此消耗的内存相对较少。此外,迭代器不会执行像追加这样的昂贵操作,因此它也很省时。文件在 Python 中是可迭代的,因此建议使用迭代器。
以下两个程序演示了如何使用 Python 读取大型文本文件。
方法一:
第一种方法使用迭代器来迭代文件。在这项技术中,我们使用 Python 中的 fileinput 模块。fileinput 模块的 input() 方法可用于读取文件。使用此方法优于 readlines() 的优点是 fileinput.input() 不会将整个文件加载到内存中。因此,没有内存泄漏的可能性。fileinput.input() 方法接受一个文件名列表,如果没有传递参数,它接受来自标准输入的输入。该方法返回一个迭代器,该迭代器返回正在扫描的文本文件中的各个行。
# 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)
解释:
input() 方法返回一个迭代器,它扫描整个文件并打印每一行。
方法二:
第二种方法也使用迭代器来读取文件。唯一的区别是我们将使用文件对象的迭代器。使用的方法是 open() 将整个文件包装成一个文件对象。接下来,我们使用迭代器来获取文件对象中的行。我们在“with”块中打开文件,因为它会在整个块执行后自动关闭文件。随着 with 块完成,exit() 方法被调用,该方法释放所有打开的资源。
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)
这种方法所需的时间相对较少。该程序也可以在没有块的情况下编写,但在这种情况下,我们必须确保明确关闭文件资源。
本站(www.100xue.net)部分图文转自网络,刊登本文仅为传播信息之用,绝不代表赞同其观点或担保其真实性。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系(底部邮箱),我们将及时更正、删除,谢谢