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

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

ただいまの
回答率

90.34%

  • Python 3.x

    7332questions

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

oPython,csvファイルにつきまして

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 143

Behemoth

score 21

こんにちは。いつもお世話になっております。

csvファイル内の検索に関する質問です。

with open('text.csv', 'r') as f:
    for line in f:
        if line.startswith(''):
            print(str(line))


上記のコードは、特定の文字から始まる「行」を抽出します。
ここで、特例の「列」からキーワードを探し、それを含む「行」を抽出する良い方法はありますでしょうか?
たとえば

|列1|列2|列3|
|Animal|Country|Food|
|Cat|US|Udon|
|Dog|UK|Ramen|


このようなcsvファイルがあるとします。

ここで、Foodの中から「Ramen」を検索し、Ramenを含む行、すなわち「Dog UK Ramen」

抽出する、といったプログラムです。

よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Behemoth

    2018/07/21 15:06

    jun68ykt 様 すみません、先ほどはマークダウンの票と申し上げましたが、csvファイルを意図していました。

    キャンセル

  • jun68ykt

    2018/07/21 15:24

    なるほどです。処理対象のテキストは、現時点の質問に挙げられているものということでよいかと思いますが、以下、補足です。 CSVというのは "Comma-Separated Values" の略なので、何も指定がなければデリミタ(区切り文字)としては半角カンマであるのが通例です。似たものとしてTSVといえばカンマではなくタブが区切り文字になります。このご質問の場合、「 |(縦棒)を区切り文字とするCSV」と言えば、話は通じなくもないです。ですが、それでも「 |(縦棒)を区切り文字とするCSV」と言われたら、(Markdownと違って)各行の先頭と末尾に | がないものを想像しますね。つまり1行目は、”列1|列2|列3” で、2行目は “Animal|Country|Food” のようにです。

    キャンセル

  • Behemoth

    2018/07/21 15:55

    ご解説ありがとうございます。大変勉強になりました。

    キャンセル

回答 1

+3

pandasでやると簡単です。ここを参考にしてください。

pandasで特定の文字列を含む行を抽出(完全一致、部分一致) | note.nkmk.me

今回の例で書くとこんな感じです。

text.csv

Animal,Country,Food,Book
cat,America,Hamburger,War and Peace
dog,Japan,Sashimi,I Am A Cat
Tiger,UK,Ramen,The Setting Sun
import pandas as pd

with open('text.csv', 'r') as f:
    df = pd.read_csv(f, header=0)
    print(df[df["Food"] == "Ramen"])

""" =>
  Animal Country   Food             Book
2  Tiger      UK  Ramen  The Setting Sun
"""

 追記

フォーマットが違うようなので追記。

with open('text.csv', 'r') as f:
    df = pd.read_table(f, sep="|", header=1)
    df = df.loc[:, ~df.columns.str.contains('^Unnamed')]

これで読めます。ただし、方法は他にもあると思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/21 14:00

    ご回答ありがとうございます。
    さっそく試してみます。

    キャンセル

  • 2018/07/21 14:11

    データのフォーマットが想定と違っていたので、dfに変換するまでの方法が変わります。変換しちゃえば同じ方法でできると思いますが

    キャンセル

  • 2018/07/21 15:07

    承知いたしました。
    ありがとうございます。

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python 3.x

    7332questions

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