我正在尝试计算一个巨大文件中的行数。这个ASCII文件大小在12-15GB之间。现在,我正在使用readline()的内容来计算文件的每一行。但当然,这是非常缓慢的。我也尝试使用seekg()和tellg()实现较低级别的读取,但由于我的文件大小,我无法分配足够大的数组来存储每个字符以运行'\ n'比较(我有8GB的内存)。阅读这个荒谬的大文件会有什么更快的方法?我在这里看了很多帖子,大多数人似乎没有32位系统限制的问题,但在这里,我认为这是一个问题(如果我错了,请纠正我)。
另外,如果有人能推荐我一个很好的方法来分割这么大的东西,那也会有所帮助。
谢谢!
答案 0 :(得分:6)
请勿尝试一次读取整个文件。如果你在计算行数,只需读取给定大小的块。几MB应该是合理的缓冲区大小。
答案 1 :(得分:4)
尝试Boost Memory-Mapped Files,Windows和POSIX平台的一个代码。
答案 2 :(得分:3)
内存映射文件不要求您实际拥有足够的RAM来容纳整个文件。我已经成功地使用了这种技术,文件高达30 GB(我想我在那台机器上有4 GB的RAM)。你需要一个64位操作系统和64位工具(我在FreeBSD上使用Python)才能解决这个问题。
使用内存映射文件显着提高了显式读取文件块的性能。
答案 3 :(得分:0)
wc -l
或等效命令吗?