我对从文件中提取列标题数据以供以后使用的最快方法感兴趣。下面我尝试了两种不同的方法:Subprocess/head 和 DictReader。结果有多个不同的数量级。
import subprocess
from csv import DictReader
def head_test():
pipe = subprocess.Popen(['head','-n','1','file_data.txt'],stdout=subprocess.PIPE, universal_newlines=True)
for row in pipe.stdout:
fields = row.strip().split('\t')
def dictreader_test():
with open('file_data.txt') as f:
f_info = DictReader(f,delimiter='\t')
fields = f_info.fieldnames
def fopen_test():
with open('file_data.txt') as f:
fields = next(f).strip().split('\t')
def rstrip_test():
with open('file_data.txt') as f:
fields = next(f).rstrip().split('\t')
if __name__ == '__main__':
import timeit
print(timeit.timeit('head_test()', setup='from __main__ import head_test', number=10000))
print(timeit.timeit('dictreader_test()', setup='from __main__ import dictreader_test', number=100000))
print(timeit.timeit('fopen_test()', setup='from __main__ import fopen_test', number=100000))
print(timeit.timeit('rstrip_test()', setup='from __main__ import rstrip_test', number=100000))
结果:
34.6136500835
0.195073127747
最近 3 次测试的附加结果达到了 100k:
1.85791897774
0.983640909195
0.973639011383
即使 head_test 中的整个 for 循环被注释掉,它也只占大约 20% 的时间。
两个问题: - 有没有更快的方法来获取列标题数据?- 这两种方法之间的主要性能差异是什么?
更新:从响应建议中添加了额外的测试