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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

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

Q&A

解決済

1回答

2550閲覧

[Python]CSVファイルへの辞書形式での書き込みについて質問です。

Apex-Riflex

総合スコア19

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

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

0グッド

0クリップ

投稿2020/01/28 04:27

初めまして。閲覧の程有難う御座います。
現在以下のような使用のアプリケーションをオンラインスクールの課題で制作しております。

#課題の仕様

  • まず、こちらが名前を聞く

  • そのあとに、おすすめのレストランの名前を聞く

  • そのレストラン名を変数に入れ、カウントをし、(レストラン名がかぶった場合はカウントを1増やす)CSVファイルに書き込む。

その際の、CSVに書き込むコードをPythonで書いていたのですが、どうも詰まってしまっています。理想は

CSV

1NAME, COUNT 2ガスト, 2 3バーミヤン, 1

と書き込めるようなpythonコードを作りたいので御座います。

現在、書き込みを行う段階で詰まってしまっているので御指南の程をお願い致します。

Python3

1count = 1 2#csvモジュールはインポート済み 3with open("ranking.csv", "w", newline="") as r: 4 5 fieldnames = ["NAME", "COUNT"] 6 writer = csv.DictWriter(r, fieldnames=fieldnames) 7 writer.writeheader() 8 writer.writerows({"NAME": Restaurant_name, "COUNT": count})

こちらを実行すると

Traceback (most recent call last): File "C:/Users/nhs90438/PycharmProjects/Python_Programming/recommend.py", line 29, in <module> writer.writerows({"NAME": Restaurant_name, "COUNT": count}) File "C:\Users\nhs90438\Anaconda3\lib\csv.py", line 158, in writerows return self.writer.writerows(map(self._dict_to_list, rowdicts)) File "C:\Users\nhs90438\Anaconda3\lib\csv.py", line 148, in _dict_to_list wrong_fields = rowdict.keys() - self.fieldnames AttributeError: 'str' object has no attribute 'keys'

このようなエラーが吐かれます。string型のオブジェクトはkeyの属性を持っていないよ!ってのはわかるのですが、やはり素人だからなのか「・・・はあ。」となって対処法が本当にわかりません。いったい何を直せばよいのでしょうか・・・ご回答お待ちしております。

実行環境:

  • python3.7

  • Pycharm

  • Windows10

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

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

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

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

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

hayataka2049

2020/01/28 04:54

変数 Restaurant_nameと countに代入されているのはどのようなオブジェクトでしょうか?
Apex-Riflex

2020/01/28 11:58

ご回答の程有難うございます。大変申し訳ないのですが、自分自身まだオブジェクトという概念についてこれといった知識が深めれていなくて、ご質問者様の意図が読み取れないでいます。ご質問者が仰りたいのは どのような値がそれらの変数に代入されているかというご質問でよろしいでしょうか?そちらでしたら、 Restaurant_nameにはユーザーからのstr型の入力値が入っています。そしてcountにはこちらからint型の1をとりあえず代入しております。ご期待に添えたつもりですが間違っていたら申し訳ございません。その際はよろしければ詳しく指摘していただくと今後の糧にもなりますので、お願い致します。
guest

回答1

0

ベストアンサー

こういうときはまず仕様を確認しましょう!!!

今回はcsvモジュールのページの、

csv.DictWriter | csv --- CSV ファイルの読み書き — Python 3.8.1 ドキュメント
writer オブジェクト | csv --- CSV ファイルの読み書き — Python 3.8.1 ドキュメント

などが参考になります。

特に、writer オブジェクトの説明の

row には、 Writer オブジェクトの場合には文字列か数値のイテラブルを指定し、 DictWriter オブジェクトの場合はフィールド名をキーとして対応する文字列か数値を格納した辞書オブジェクトを指定します(数値は str() で変換されます)。


csvwriter.writerow(row)

Write the row parameter to the writer's file object, formatted according to the current dialect. Return the return value of the call to the write method of the underlying file object.


csvwriter.writerows(rows)
rows 引数 (上で解説した row オブジェクトのイテラブル) の全ての要素を現在の表現形式に基づいて書式化し、writer のファイルオブジェクトに書き込みます。

などの記述が役に立ちます。

投稿2020/01/28 04:53

hayataka2049

総合スコア30933

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問