JP / EN

広告

タブ区切りファイルtsvもPythonではcsv.readerで読み込む

タグ:python

タイトルのまんまであるが、tsvが読みたいときもcsv.readerが使える。tsvだけでなく 他の一般の特定記号区切りテキストをcsvパッケージは扱えるのだ。
それじゃパッケージ名がcsvだとややこしくないか……とも思うが、ここでちょっと洒落て "xsv reader"とかにしてしまっていたら、逆にcsvのことだと分からず困ってしまいそうでもあるので 一番一般的なcsvを名前にしているのはやむを得ないともいえる。なおtsvモジュールとかtsv.readerのようなものはないので間違えないように注意。

使い方としては、csv.readerのパラメータdelimiterに区切り文字を渡してやればよい。 デフォルト値は","であり、ここにタブを指定するときはエスケープ文字"\t"で表現できる。
    import csv
    with open('test.tsv') as csvfile:
      csvr = csv.reader(csvfile, delimiter='\t')
      for row in csvr:
        print(', '.join(row))

    # a b c
  
同様にほかの文字で区切られた特殊なファイルもcsv.readerで区切ることができる。 tsvとcsv以外の区切りデータファイルは存在するのだろうか?と思うかもしれないが、 社内独自データなどで個人的に^区切りや@区切りを見たことがある(やめろ)。

なおこの程度ならcsv.readerを使わなくても手で呼んでsplitで分割しても大して手間は 変わらないように思える。
    with open('test.tsv') as csvfile:
      rows = [l.rstrip().split('\t') for l in csvfile.readlines()]
    print(rows)
    # [[a, b, c]]
  


また余談であるがポピュラーなpandasだとcsv用のpd.read_csvとtsv等汎用のpd.read_table が別に用意されている。混同しないように気を付けよう。

おすすめ記事

Pandas 複数のファイルをまとめてDataFrameとして読み込む

Python 内包表記の使い方をマスターする

NumPy np.clip: arrayの値の範囲を指定した最大値・最小値に合わせて丸める



このエントリーをはてなブックマークに追加

https://wonderhorn.net/