こんにちは。いつもお世話になっております。
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」
を
抽出する、といったプログラムです。
よろしくお願いいたします。
CSVファイルのデータ行の各項目はスペース区切りなのでしょうか?もしそうだとすると、たとえば、"War and Peace" は3つの項目として認識されてしまい、この行のBook列のデータは "War" ということになってしまいます。なので項目の区切りは、たとえば半角カンマなどでもよいのでしょうか?
すみません、捕捉します。ご指摘ありがとうございます。
表現の工夫とかはしなくていいので、コードブロック挿入してcsvをテキストとして貼ってください
ただ今修正しました
修正を拝読しました。つまり、CSVというよりは、Markdown 記法で書かれた表のデータ行の中で、ある列に特定のテキストが含まれる行を抽出したいということでしょうかね?
左様でございます。ご不便をおかけしました。
Markdown 記法ならcsvではない訳ですが。まだ腑に落ちないので、上で「コードブロック挿入してcsvをテキストとして貼ってください」とコメントした通りに書いてくれませんか
なるほどです。であれば、質問を修正して作成した、その Markdown による表全体をソースコードとみなして、 ``` (バッククオート3連続)でくくってもらえますでしょうか? その表が開始するところと終了した直後に ``` を入れるということです。そうすることで、マークダウンのソースコード自体が質問に反映されると思います。
承知しました。ご指摘ありがとうございますm(__)m
修正を確認しました。これはMarkdown記法によるページの中の、ある表の部分でしょうか?だとするとtest.csv という名前で保存するのではなく、 拡張子を md にしてtest.md という名前で保存しMarkdownによるテキストファイルであることを明示したほうが良さそうです。
|列1|列2|列3|は実際のデータにも含まれますか。仮に含まれるとして、最初のスペースは?
マークダウンの表だと、ヘッダ行とデータ行の間に |:-----------:|------------:|:------------:| のような区切りの行が必要と思いますが、それは無いということでよいでしょうか?
最初のスペースはタイプミスです。修正しておきます。
jun68ykt 様 すみません、先ほどはマークダウンの票と申し上げましたが、csvファイルを意図していました。
なるほどです。処理対象のテキストは、現時点の質問に挙げられているものということでよいかと思いますが、以下、補足です。 CSVというのは "Comma-Separated Values" の略なので、何も指定がなければデリミタ(区切り文字)としては半角カンマであるのが通例です。似たものとしてTSVといえばカンマではなくタブが区切り文字になります。このご質問の場合、「 |(縦棒)を区切り文字とするCSV」と言えば、話は通じなくもないです。ですが、それでも「 |(縦棒)を区切り文字とするCSV」と言われたら、(Markdownと違って)各行の先頭と末尾に | がないものを想像しますね。つまり1行目は、”列1|列2|列3” で、2行目は “Animal|Country|Food” のようにです。
ご解説ありがとうございます。大変勉強になりました。