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

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

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

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3593閲覧

CSVから、特定の文字列を含む列を表示する際にエラーが出てしまいます。

hiroikawa55

総合スコア26

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/27 14:46

Flask を用いて、CSVファイルからデータを取り出して、特定の文字列を含む列(プログラム中では'高橋'を含む列)を表示させたいのですが、
AttributeError: 'collections.OrderedDict' object has no attribute 'find'

が出てしまいます。
該当するコード部分は下記となります。
csv.DictReaderにfindが使えないのではないかと思い、
ほかの方法はないか、検索をしたのですが、よい方法が見つからず、
こちらで質問をさせていただく次第です。
どうぞよろしくお願いいたします。

python

1def load_data(): 2 result = [] 3 with open(DATA_FILE, mode='r', encoding='utf-8') as csv_file: 4 csv_reader = csv.DictReader(csv_file, 5 fieldnames=['created_at','memo','structure','age','type','type2','toroku','text']) 6 for row in csv_reader: 7 if row.find('高橋'): 8 result.append(dict(row)) 9 return result

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

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

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

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

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

can110

2020/01/27 15:57 編集

具体的なDATA_FILEの中身の例と欲しい結果(resultの値)を追記ください。
Wind

2020/01/28 00:15

単純にCSVの保存形式がutf8では無くsjisとか?
hiroikawa55

2020/01/28 04:17

DATA_FILEの中身は、 日付 名前 構造 時代 種別 種別2 登録の有無 備考 となっており、日付と’登録の有無’以外は文字列の値が入っています。 ほしい結果は、 日付 名前 構造 時代 種別 種別2 登録の有無 備考 のなかのいずれかの項目に、特定の文字列('高橋'など)、が含まれている時に、その列が表示されるようにしたいのです。 あらためて書いてみると、思ったほど単純ではないことに気づいてきました・・・。
hiroikawa55

2020/01/28 04:18

ご指摘ありがとうございます。sjisに変えてみたのですが、 UnicodeDecodeErrorが出るため、保存形式の問題ではないようです。
guest

回答2

0

これをお試しください

for row in csv_reader: if '高橋' in row: result.append(dict(row))

投稿2020/01/27 15:32

harinezumi.py

総合スコア282

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

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

can110

2020/01/27 15:49

「特定の文字列を含む列」を「特定の文字列を含む列名」と解釈しての回答でしょうか? 質問コードにおいては列名は「'created_at',~」のように与えられており「高橋」は含まれていないため 回答コードでは常に結果は空リストになってしまうのではないでしょうか?
hiroikawa55

2020/01/28 04:21

harinezumi.py 様 試してみたところ、動きました! ただ、文字列が含まれている列は抽出されないようで、、、もう少しいろいろと試みてみたいと思います。 ありがとうございました。
guest

0

ベストアンサー

質問でのは実際にはだと読み替えての回答です。
rowOrderedDictですが、これにはfind関数は定義されていません。
以下のようにrow.items()にて実際の行の各列値から目的の文字列を探すようにすればよいです。

Python

1import pandas as pd 2import csv 3from io import StringIO 4 5s = 'a,b,c\nAlice,d,e\nf,Alice,g\nh,i,j' 6df = pd.read_csv(StringIO(s), names=['c1','c2','c3']) 7print(df) 8""" 9 c1 c2 c3 100 a b c 111 Alice d e 122 f Alice g 133 h i j 14""" 15 16def load_data(): 17 result = [] 18 csv_reader = csv.DictReader(StringIO(s), fieldnames=['c1','c2','c3']) 19 for row in csv_reader: 20 print(row) # OrderedDict([('c1', 'a'), ('c2', 'b'), ('c3', 'c')]) など 21 if 'Alice' in row.values(): 22 result.append(dict(row)) 23 return result 24 25ret = load_data() 26print(ret) 27# [{'c1': 'Alice', 'c2': 'd', 'c3': 'e'}, {'c1': 'f', 'c2': 'Alice', 'c3': 'g'}]

投稿2020/01/27 15:16

can110

総合スコア38260

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

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

hiroikawa55

2020/01/28 04:33

動きました! 組み立て方がわかるような、表現としていただき、たいへんわかりやすく、ためにもなります。 あと、列と行、勘違いに赤面しております・・・。 たいへんありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問