【问题标题】:Is there a really efficient (FAST) way to read large text files in python?是否有一种非常有效(快速)的方式来读取 python 中的大型文本文件?
【发布时间】:2017-02-18 01:37:17
【问题描述】:

我希望尽快在 python 中打开一个大文本文件并从中获取数据(它几乎有 62603143 行 - 大小 550MB)。由于我不想给我的电脑带来压力,所以我按照以下方式进行操作,

import time
start = time.time()
for line in open(filePath):
    #considering data as last element in file
    if data in line:
        do_something(data)
end = time.time()
print "processing time = %s" % (count, end-start)

但正如我通过上述方法所做的那样,它需要几乎 18 秒 才能读取完整文件(我的计算机具有 Intel i3 处理器和 4 GB RAM)。同样,如果文件大小更大,则需要更多时间,并且考虑到用户的观点,它非常大。我在论坛上阅读了很多意见,提到了多个 Stack Overflow 问题,但没有获得从大文件中读取和获取数据的快速有效的方法。 Python 真的有办法在几秒钟内读取大型文本文件吗?

【问题讨论】:

  • 您可以使用 grep 提前过滤掉您想要的行,然后通过 python 运行剩余的数据。
  • @acushner 我猜这是为 linux 做的,我是为 windows 做的
  • grep 存在于 Windows 上。易于安装

标签: python python-2.7 text-files


【解决方案1】:

不,没有更快的方法来逐行处理文件,而不是从 Python 中。

您的瓶颈是您的硬件,而不是您读取文件的方式。 Python 已经在尽其所能(在拆分为换行符之前使用缓冲区以更大的块读取文件)。

我建议将您的磁盘升级到 SSD。

【讨论】:

  • @Martijn Pieters 在 C# 中使用流阅读器需要 4-5 秒。我正在寻找一种python方式。不管怎样,谢谢你..
  • @saliltamboli:那是你的do_something() 函数慢吗?您是否改为使用pass
  • @saliltamboli:另外,你有一个 for 循环,它作为 Python 字节码执行,它永远不会像 C# JIT 驱动的循环那样快,并且会产生一个 Python str对象,它比 C# 字符串“重”。您可以尝试使用from collections import dequedeque(open(filePath), maxlen=0) 完全消除循环,只需读取行,生成字符串并再次丢弃它们。
  • 我通过打印找到的数据计算了完整的文件处理时间。此函数中未使用数据处理操作。计算的处理时间仅用于迭代。
猜你喜欢
  • 2011-01-24
  • 1970-01-01
  • 2016-01-05
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
相关资源
最近更新 更多