如何读取大约 2 GB 的文本文件? [复制]

Posted

技术标签:

【中文标题】如何读取大约 2 GB 的文本文件? [复制]【英文标题】:How do I read a text file of about 2 GB? [duplicate] 【发布时间】:2013-08-15 00:51:20 【问题描述】:

我有一个内存超过 2 GB 的 .txt 文件。问题是我无法使用记事本、Notepad++ 或任何其他编辑器程序打开它。

有什么解决办法吗?

【问题讨论】:

所有文本编辑器都不能打开任意大的文件有什么好的理由吗? 我不认为这是重复的 - 其他问题要求文本 editor。这是在寻找文本阅读器。当然存在重叠(编辑器可以用作阅读器),但解决方案可能不同。 只有在 SO 社区能够理解的情况下:P @endolith 是的。它与编辑器如何处理数据有关。实际上只有几种方法可以走——要么将所有数据加载到内存中,要么将部分数据加载到内存中。最简单的方法是加载到内存中,但是打开文件的大小会有一些限制。为了没有限制,编辑器需要想出一个方案来加载一个子集以供查看时间,提供一个大数据集的小视口,并在视口移动时管理从磁盘进出内存的交换。然后您还必须处理小视图之外的搜索、替换等范围。 我正要大喊:“呃,这不是因为 Notepad++,而是因为你使用的是 32 位编辑器”。事实证明,在自欺欺人之前尝试一下是明智的。我正在使用 Notepad++ 64 位,它也无法打开大于 2GB 的文件... 【参考方案1】:

试试Glogg。 快速、智能的日志浏览器。

我打开了 2 GB 左右的日志文件,搜索也很快

【讨论】:

请注意,这是一个只读编辑器! 我可以用 Glogg 快速打开一个超过 2 GB 的文件,Notepad++ 和 WordPad 都无法打开(或任何其他标准文本编辑器)。谢谢! IMO - 这应该是公认的答案。尽管 Glogg 是阅读器而不是编辑器,但 OP 要求 阅读 大文本文件。 我设法在没有权限的情况下在我的 Windows 笔记本电脑上运行 Glogg,如下所示:下载 Windows 安装程序 exe,而不是执行安装程序 exe,而是将其解压缩(例如 7-Zip)。在提取的根文件夹中,运行 glogg.exe 我试过了。真的很快。【参考方案2】:

写字板可以打开任何大小的文本文件。但是,与文本编辑器相比,它的功能有限。

【讨论】:

+1 @Kiki。我刚刚用写字板打开了一个Notepad++打不开的1.2G文件。 @Joe 这确实回答了原始问题。我唯一不同意 Kiki 的地方是写字板是一个文本编辑器。 不正确 - 它在 52GB 的文本文件中阻塞。 记住你的机器有多少内存。不能指望在没有大量 RAM 的情况下加载 52GB 的文件:P @RobertM。一个聪明的程序不会一次将整个东西加载到内存中。在具有 4 GB RAM 的机器上加载 52 GB 文件是完全可能的。【参考方案3】:

您可以使用工具将文本文件分割成更小的块,而不是加载/读取完整的文件。如果您使用的是 Linux,则只需使用 split 命令(请参阅this *** thread)。对于 Windows,有多种工具可用,例如 HJSplit(请参阅 this superuser thread)。

【讨论】:

HJSplit 为我工作。根据 wiki sourceforge 文档:“较新的版本 (5.2+) 将拒绝打开文件并发出错误消息。为什么会这样?Notepad++ 基于一个组件 (Scintilla),该组件旨在提供富文本查看,具有语法突出显示和代码折叠,而不是批量文本服务。有必要的权衡。加载一个 200MB 的文件将需要大约 800MB 的内存,并且操作系统可能会拒绝内存分配请求。"【参考方案4】:

我使用 UltraEdit 编辑大文件。我用 UltraEdit 打开的最大大小约为 2.5 GB。与 Notepad++ 相比,UltraEdit 也有一个很好的十六进制编辑器。

【讨论】:

UltraEdit 可以编辑任意大小的文件,与安装的 RAM 大小无关。在仅安装 2 GB RAM 的计算机上编辑超过 8 GB 的文件是没有问题的。为了使用 UE 高效编辑大文件,一些配置应从默认更改,如电源提示中所述:Large file text editor。 今天我用一个 7.6 GB 的文件试了一下。它工作正常,但只有在更改配置后,“打开没有临时文件的文件...”(在文件处理临时文件中) .【参考方案5】:

EmEditor 非常适合我。它是共享软件 IIRC,但在许可证到期后不会停止工作..

【讨论】:

我现在已经在家里试用了 EmEditor 的试用版,印象非常深刻,我也打算在 2 月份在工作中试用它。然后购买。 但是我有更多的需求,比如编码更改,以及进行认真的编辑。我的是数据文件而不是日志文件。 为 EmEditor 投票 - 我们一直在使用它,而且非常值得!它打开的文件大小很多。【参考方案6】:

我总是使用010 Editor 打开大文件。它可以轻松处理 2 GB。我正在使用 010 Editor 处理具有 50 GB 的文件 :-)

现在是商业版,但有试用版。

【讨论】:

它不是免费的。 我认为是。早在 2015 年 6 月 :-) 无论如何,它有单次阅读的试用期 + 我敢打赌它仍然可以很好地工作。最近没有机会使用它。 你知道这个编辑器是用哪种语言开发的吗? @ɹɐqʞɐzoɹǝɟ 我最大的赌注是 C/C++,但这只是我在他们网站上找到的关于作者和文档的一般印象。 是的,这是最好的:-)【参考方案7】:

如果你只需要阅读文件,我可以推荐大文本文件查看器。 https://www.portablefreeware.com/?id=693

也参考这个

Text editor to open big (giant, huge, large) text files

如果您想制作自己的工具,请试试这个。我想你知道 c# 中的文件流阅读器

const int kilobyte = 1024;
const int megabyte = 1024 * kilobyte;
const int gigabyte = 1024 * megabyte;

public void ReadAndProcessLargeFile(string theFilename, long whereToStartReading = 0)

    FileStream fileStream = new FileStream(theFilename, FileMode.Open, FileAccess.Read);
    using (fileStream)
    
        byte[] buffer = new byte[gigabyte];
        fileStream.Seek(whereToStartReading, SeekOrigin.Begin);
        int bytesRead = fileStream.Read(buffer, 0, buffer.Length);
        while(bytesRead > 0)
        
            ProcessChunk(buffer, bytesRead);
            bytesRead = fileStream.Read(buffer, 0, buffer.Length);
        
    


private void ProcessChunk(byte[] buffer, int bytesRead)

    // Do the processing here

请参考

http://www.codeproject.com/Questions/543821/ReadplusBytesplusfromplusLargeplusBinaryplusfilepl

【讨论】:

大文本文件查看器无法打开我的 2.5GB json 文件,变得无响应。【参考方案8】:

试试Vim, emacs(如果在 32 位模式下编译,则最大缓冲区大小限制较低),hex 工具

【讨论】:

【参考方案9】:

有很多工具可用于查看大文件。 http://download.cnet.com/Large-Text-File-Viewer/3000-2379_4-90541.html 比如这个。 但是,我成功地在 Visual Studio 中查看了较大的文件。以为加载需要一些时间,但它起作用了。

【讨论】:

VS 中的 2 GB 文件? 一些用户提到他们使用 VSC 打开了一个 3.5 GB 的 .json (***.com/a/159537/5675325)。【参考方案10】:

对于阅读和编辑,Geany for Windows 是另一个不错的选择。我已经尝试限制 Notepad++ 的问题,但 Geany 还没有。

【讨论】:

因为这条评论,我下载了 geany(所以我没有什么好或坏的说法),但它无法打开我的 ~3.3 GB 文件。 我无法使用 geany 打开 2.9 GB 的文件,但这是我的计算机本身资源不足。我最终使用命令行type filename |more 来加载我需要的内容。现在我创建了一个 2GB 的文件并遇到了同样的问题,所以显然 Geany 不是这里的答案 我也无法打开 680mb 的文件。 Geany 在尝试为我打开 3.3 GB 文件时关闭。

以上是关于如何读取大约 2 GB 的文本文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .NET 中读取大 (1GB) 文本文件?

在火花分析之前从 FTP 读取大文本文件

在火花分析之前从FTP读取大文本文件

非常快的文本文件处理 (C++)

逐行处理非常大 (>20GB) 的文本文件

用 Java 读取大文件