关键词:
【中文标题】在python中逐行读取一个大的压缩文本文件【英文标题】:Read a large zipped text file line by line in python 【发布时间】:2012-07-14 00:05:52 【问题描述】:我正在尝试使用 zipfile 模块来读取存档中的文件。未压缩文件约为 3GB,压缩文件为 200MB。我不希望它们在内存中,因为我逐行处理压缩文件。到目前为止,我注意到使用以下代码的内存过度使用:
import zipfile
f = open(...)
z = zipfile.ZipFile(f)
for line in zipfile.open(...).readlines()
print line
我是在 C# 中使用 SharpZipLib 完成的:
var fStream = File.OpenRead("...");
var unzipper = new ICSharpCode.SharpZipLib.Zip.ZipFile(fStream);
var dataStream = unzipper.GetInputStream(0);
dataStream 未压缩。我似乎找不到在 Python 中做到这一点的方法。我们将不胜感激。
【问题讨论】:
【参考方案1】:Python 文件对象提供迭代器,它将逐行读取。 file.readlines()
将它们全部读取并返回一个列表 - 这意味着它需要将所有内容读入内存。更好的方法(应该始终优先于readlines()
)是只循环对象本身,例如:
import zipfile
with zipfile.ZipFile(...) as z:
with z.open(...) as f:
for line in f:
print line
注意我对the with
statement 的使用——文件对象是上下文管理器,with 语句让我们可以轻松编写可读代码,确保在退出块时(即使出现异常)关闭文件。同样,在处理文件时应该始终使用它。
【讨论】:
不能说比这更好了 @Gareth Latty,是否有关于 open 函数采用什么类型的参数的说明文档?我想看看我是否可以像使用“with open()”函数一样为 open() 设置内存缓冲区 我注意到的另一件事是z.open()
似乎不允许r
选项。当您需要在 for line in f:
块中运行一些逻辑时,这就会发挥作用。 示例: if line.find("YES") != -1: print('yay')
。这将返回 TypeError
。您必须在"YES"
前面加上b
才能使其工作。
@ericOnline 那是因为你得到的是字节,而不是 unicode 字符串。根据用例,您可能希望将其解码为 UTF-8 以获取真正的字符串,而不仅仅是使用字节字符串。
使用 io.TextIOWrapper;例如with io.TextIOWrapper(z.open(...), encoding='utf-8') as f:
在一个非常大的文件中逐行读取特定的行
】在一个非常大的文件中逐行读取特定的行【英文标题】:Readingaparticularlinebylinenumberinaverylargefile【发布时间】:2012-09-2718:06:13【问题描述】:文件不适合内存。它超过100GB,我想按行号访问特定行。在到达之前我不想逐行数数... 查看详情
如何在 Java 中逐行读取文本文件并分隔每一行的内容?
】如何在Java中逐行读取文本文件并分隔每一行的内容?【英文标题】:Howdoyoureadatextfile,linebyline,andseparatecontentsofeachlineinJava?【发布时间】:2015-10-1401:21:23【问题描述】:我想知道如何读取文件并扫描每一行,但将每一行的内容... 查看详情
在 Fortran 中逐行读取逗号分隔的文本文件
】在Fortran中逐行读取逗号分隔的文本文件【英文标题】:Readingacomma-delimitedtextfileline-by-lineinFortran【发布时间】:2011-09-2209:31:39【问题描述】:我是Fortran新手。我希望能够读取文本文件并将其内容保存在各个变量中。我找到了一... 查看详情
在 Swift 中逐行读取文本文件?
】在Swift中逐行读取文本文件?【英文标题】:ReadatextfilelinebylineinSwift?【发布时间】:2015-10-2501:16:18【问题描述】:我刚开始学习Swift。我已经从文本文件中读取了我的代码,并且应用程序显示了整个文本文件的内容。如何逐行... 查看详情
在 VBA 中逐行读取/解析文本文件
】在VBA中逐行读取/解析文本文件【英文标题】:Read/ParsetextfilelinebylineinVBA【发布时间】:2012-07-1617:45:47【问题描述】:我正在尝试使用VBA解析文本文档并返回文本文件中给出的路径。例如,文本文件如下所示:*Blahblahinstructions*B... 查看详情
在 C 中逐行浏览文本文件
】在C中逐行浏览文本文件【英文标题】:GoingthroughatextfilelinebylineinC【发布时间】:2012-03-0115:24:32【问题描述】:我一直在为我的CIS课程做一个小练习,并且对C用于读取文件的方法感到非常困惑。我真正需要做的就是逐行读取文... 查看详情
如何读取用 7z 压缩的文本文件?
...描述】:我想从7z压缩的csv(文本)文件中逐行读取(在Python2.7中)。我不想解压缩整个(大)文件,而是流式传输。我尝试pylzma.decompressobj()失败。我收到数据错误。请注意,此代码尚未逐行读取:input_filename=r"te 查看详情
Objective C - 创建文本文件以在 Cocoa 中逐行读取和写入
】ObjectiveC-创建文本文件以在Cocoa中逐行读取和写入【英文标题】:ObjectiveC-CreatetextfiletoreadandwritelinebylineinCocoa【发布时间】:2013-07-2017:17:28【问题描述】:我正在构建一个Mac应用程序,我有2个问题:我想创建一个文本文件来读... 查看详情
我应该如何在 Python 中逐行读取文件?
】我应该如何在Python中逐行读取文件?【英文标题】:HowshouldIreadafileline-by-lineinPython?【发布时间】:2012-07-1807:41:35【问题描述】:在史前时代(Python1.4)我们做到了:fp=open(\'filename.txt\')while1:line=fp.readline()ifnotline:breakprintline在Pyt... 查看详情
如何从 C++ 中的文本文件中逐行读取整数? [复制]
】如何从C++中的文本文件中逐行读取整数?[复制]【英文标题】:Howtoreadintegerslinebylinefromatextfileinc++?[duplicate]【发布时间】:2020-02-2420:10:58【问题描述】:所以我有一个关于图表的问题,我必须从输入文件中读取多个案例并检查... 查看详情
从文本文件中逐行提取数据并将其存储在python的列表中[重复]
】从文本文件中逐行提取数据并将其存储在python的列表中[重复]【英文标题】:extractingdatalinebylinefromatextfileandstoringitinalistinpython[duplicate]【发布时间】:2020-07-0920:06:10【问题描述】:我有一个包含不同国家名称的文本文件,如下... 查看详情
在 Java 中逐行处理文本文件和连字符字符串
】在Java中逐行处理文本文件和连字符字符串【英文标题】:ProcessingtextfilesandhyphenatingstringslinebylineinJava【发布时间】:2013-08-0501:51:40【问题描述】:我有一个.txt文件,单列中有8,000行。每行包含一个字母数字或一个数字,如下所... 查看详情
在 Java 中逐行读取和写入大文件的最快方法
】在Java中逐行读取和写入大文件的最快方法【英文标题】:FastestWayToReadandWriteLargeFilesLineByLineinJava【发布时间】:2012-10-2018:41:18【问题描述】:我一直在寻找在内存有限(约64MB)的Java中再次读取和写入大文件(0.5-1GB)的最快方... 查看详情
在 C# 中逐行读取文件
】在C#中逐行读取文件【英文标题】:ReadingafilelinebylineinC#【发布时间】:2010-11-1906:20:55【问题描述】:我正在尝试读取一些文本文件,其中每一行都需要处理。目前我只是使用StreamReader,然后单独读取每一行。我想知道是否有... 查看详情
如何在 Julia 中逐行读取文件?
】如何在Julia中逐行读取文件?【英文标题】:HowtoreadafilelinebylineinJulia?【发布时间】:2020-01-2920:32:14【问题描述】:如何打开文本文件并逐行读取?我对两种不同的情况感兴趣:一次获取数组中的所有行。一次处理每一行。对... 查看详情
如何在目标c中逐行解析JSON文件
】如何在目标c中逐行解析JSON文件【英文标题】:HowtoparseaJSONfilelinebylineinobjectivec【发布时间】:2018-01-0115:33:51【问题描述】:我正在处理非常大的JSON文件,因此我不想读取整个文件然后迭代和解析每个数据条目。相反,我想迭... 查看详情
在 Go 中逐行读取文件
】在Go中逐行读取文件【英文标题】:ReadingafilelinebylineinGo【发布时间】:2012-02-0403:44:52【问题描述】:我在Go中找不到file.ReadLine函数。我可以弄清楚如何快速写一个,但我只是想知道我是否在这里忽略了一些东西。如何逐行读... 查看详情
在批处理文件中逐行读取txt
】在批处理文件中逐行读取txt【英文标题】:Readatxtlinebylineinabatchfile【发布时间】:2012-05-0403:47:56【问题描述】:这是我的问题。我有一个包含100个不同视频名称的txt文件(示例):abc.mpgdef.mpgghi.mpgxyz.mpg我想使用一些命令一个... 查看详情