读取Python中用空格分隔的数据的最快方法

时间:2015-03-18 19:46:26

标签: python tabular

我有一些数据被空格分隔,我想从中提取某些列。在过去,我总是在Python中使用类似下面的内容,其中我删除了非必需品:

for line in open(f,'r'):
    l = line.split()
    print " ".join(l[1:3])

我想知道这是否是最快的方法。如果我与另一个读取相同数据的软件包(用C语言编写)进行比较,我的代码会慢得多。这只是因为C中的I / O更快还是我写的是次优代码?

3 个答案:

答案 0 :(得分:0)

您可以使用列表推导来获取列表中的预期列。

expectedColumns = [" ".join(x) for x in [line.split()[0:2] for line in file("testFile",'r').readlines()]]

如果要打印LC内的列,可以执行以下操作:)

from __future__ import print_function
[print(" ".join(x)) for x in [line.split()[0:2] for line in file("testFile",'r').readlines()]]

答案 1 :(得分:0)

直接迭代file时,会逐行读取文件。这对于巨大的文件有帮助,但是在IO的惩罚下,即使它实现了预读缓冲区。 AFAIK,在内部使用seektell进行迭代。

如果你read(),它会读取整个内容一次,但代价是内存。在您的情况下,您可以执行read().split('\n')readlines()(首选),这比直接迭代文件更快。

除了上述内容之外,请在处理文件时使用上下文管理器,这样一旦完成它们就会关闭。

Docs

答案 2 :(得分:0)

您可能需要查看CSV模块。 csv.reader在c中实现,应该比使用纯python更快。

import csv
with open(f, 'rb') as file:
    r = csv.reader(file, delimiter=' ')
    for line in r:
        print ' '.join(line[1:3])