質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1741閲覧

Python3系でtsvファイルのヘッダー部分を削除したい

amaturePy

総合スコア131

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/03/25 16:17

Python3系でtsvファイルの中身を読み込んで、キーの値である飲食店名を出力したいです。
そこでtsv内データを辞書型にする際にヘッダー部分(NAME COUNT)まで入ってしまいます。
できればここを抜きたいのですが、うまく行きません。
アドバイス頂けたら幸いです。
【tsvファイル】

NAME COUNT 吉野家 3 バーミヤン 2 すき家 1 松屋 1 ラーメン屋 1 無回答 1

【対応したこと】
nextメソッドを実行

import csv #name = input("What's your name?") file0 = "/Users/apple/Downloads/practice.tsv" datas = [] with open(file0, mode="r", encoding="utf-8") as f: reader = next(csv.DictReader(f)) for i in reader: #keys = i.keys() datas.append(i) print(datas) 実行結果 ['NAME\tCOUNT']

【現状のコード】

import csv #name = input("What's your name?") file0 = "/Users/apple/Downloads/practice.tsv" datas = [] with open(file0, mode="r", encoding="utf-8") as f: reader = csv.DictReader(f) for i in reader: #keys = i.keys() datas.append(i) print(datas) 実行結果 [OrderedDict([('NAME\tCOUNT', '吉野家\t3')]), OrderedDict([('NAME\tCOUNT', 'バーミヤン\t2')]), OrderedDict([('NAME\tCOUNT', 'すき家\t1')]), OrderedDict([('NAME\tCOUNT', '松屋\t1')]), OrderedDict([('NAME\tCOUNT', 'ラーメン屋\t1')]), OrderedDict([('NAME\tCOUNT', '無回答\t1')])] ​

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

TSVファイルをdict型にしたいだけならば、pandas 使うと簡単にできます。

import pandas as pd d = pd.read_table('data.tsv', index_col='NAME').to_dict()['COUNT'] print(d) #{'吉野家': 3, 'バーミヤン': 2, 'すき家': 1, '松屋': 1, 'ラーメン屋': 1, '無回答': 1}

投稿2020/03/25 23:18

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amaturePy

2020/03/26 11:59

ありがとうございます! pandasを使うと こんなに短いコードで実現できるのですね。
guest

0

TSVの読み込み (csv.DictReaderの場合)

csvモジュールでの区切り文字はカンマなので、
tsvの場合はdelimiterにタブを指定します。

python

1reader = csv.DictReader(f, delimiter="\t") 2for row in reader: 3 print(row["NAME"], row["COUNT"])

ヘッダ行を読み飛ばす (next() -> csv.reader)

python

1next(f) # ファイルの1行目を読み飛ばしてから、こちらでは csv.reader を使う 2reader = csv.reader(f, delimiter="\t") 3for name, count in reader: 4 print(name, count)

辞書へ変換 (column長が2の場合のみ)

python

1next(f) 2data = dict(csv.reader(f, delimiter="\t")) 3print(data)
{'無回答': '1', '松屋': '1', 'ラーメン屋': '1', 'バーミヤン': '2', '吉野家': '3', 'すき家': '1'}

count値を文字列ではなく数値型にする場合は

python

1next(f) 2data = dict((name, int(count)) for name, count in csv.reader(f, delimiter="\t"))

投稿2020/03/25 16:57

teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amaturePy

2020/03/26 11:59

ありがとうございます! とても参考になりました! 読み込みから辞書への変換まで一連のコードを真似して見ます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問