0

後で使用するためにファイルから列ヘッダー データを取得する最も簡単な方法に興味があります。以下では、Subprocess/head と DictReader の 2 つの異なる方法を試しました。結果は、複数の大きさが異なっていました。

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% の時間しか占めません。

2 つの質問: - 列ヘッダー データを取得する簡単な方法はありますか? - これら 2 つの方法の主なパフォーマンスの違いの原因は何ですか?

更新: 応答の提案からの追加のテストで追加されました

4

2 に答える 2