後で使用するためにファイルから列ヘッダー データを取得する最も簡単な方法に興味があります。以下では、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 つの方法の主なパフォーマンスの違いの原因は何ですか?
更新: 応答の提案からの追加のテストで追加されました