在Python中流式处理1GB文件

-3 投票
3 回答
607 浏览
提问于 2025-04-16 00:53

在一台2GHz的Intel Core 2 Duo电脑上,流式传输一个1GB的文件大概需要多长时间呢?

fp = open('publisher_feed_8663.xml')
for line in fp:
   a = line.split('<')

我想我没有说清楚。这个过程花了20分钟以上,这实在是太长了。根据一些实际的数据,合理的时间应该是多少呢?

3 个回答

1

这完全取决于文件里的内容。你是逐行读取文件,这样会导致每次都要调用迭代器,特别是当文件里有很多短行的时候,这样效率会很低。建议使用 fp.read(CHUNK),把 CHUNK 设置成一个比较大的数字,这样可以提高性能。

不过,我不太明白你用 split('<') 是想干嘛。用这么简单的工具处理XML是没什么用的,因为XML并不是以行为基础的。如果你想在读取文件的时候对XML信息做点什么,建议使用SAX解析器。再说了,1GB的XML文件?这真的有点不合理。

3

其他人已经讨论过时间的问题,我来谈谈处理方面的内容(XML的部分暂且不提)。

如果你正在做一些非常庞大的事情,绝对应该考虑使用生成器。这个PDF会教你关于生成器的基本知识,几乎是你需要了解的所有内容。每当你需要处理大量数据(特别是顺序处理)时,生成器应该是你最好的伙伴。

8

你的回答:

start = time.time()
fp = open('publisher_feed_8663.xml')
for line in fp:
   a = line.split('<')
print time.time() - start

你需要一个名为 publisher_feed_8663.xml 的1GB文件,使用Python编程语言,以及一台2GHz的Intel Core 2 Duo电脑。

在处理XML文件时,你可能想用一种基于事件的流解析器,比如SAX或lxml。我建议你看看lxml的文档,特别是关于iterparse的部分:http://lxml.de/parsing.html#iterparse-and-iterwalk

至于这个过程需要多长时间,你可以在Linux系统上使用一些工具,比如 hdparm -tT /dev/sda 来做简单的硬盘性能测试。

更多的内存总是有助于处理大文件,因为操作系统可以保持更大的磁盘缓存。

撰写回答