我有一些数据被空格分隔,我想从中提取某些列。在过去,我总是在Python中使用类似下面的内容,其中我删除了非必需品:
for line in open(f,'r'):
l = line.split()
print " ".join(l[1:3])
我想知道这是否是最快的方法。如果我与另一个读取相同数据的软件包(用C语言编写)进行比较,我的代码会慢得多。这只是因为C中的I / O更快还是我写的是次优代码?
答案 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,在内部使用seek
和tell
进行迭代。
如果你read()
,它会读取整个内容一次,但代价是内存。在您的情况下,您可以执行read().split('\n')
或readlines()
(首选),这比直接迭代文件更快。
除了上述内容之外,请在处理文件时使用上下文管理器,这样一旦完成它们就会关闭。
答案 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])