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

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

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

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

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

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

Q&A

解決済

1回答

2143閲覧

csvファイルにfor文で回した出力結果を追記していきたい

Kokku

総合スコア39

CSV

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

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

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

0グッド

1クリップ

投稿2021/03/24 09:30

編集2021/03/26 06:08

Face++のdeceteAPIを使いフォルダ内の画像すべてに感情推定を行い、その出力結果をcsvファイルに追記していき一つのcsvファイルにまとめるプログラムを書きたい。

# coding: utf-8 import os import sys import csv import pandas as pd import requests sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) sys.path.append('E:/facepp-python-demo-master/facepp-python-demo-master/example/detect/images/images01/*') from config import API_KEY, API_SECRET, DETECT_PATH ,ANALYZE_PATH from images import images01 from images import images02 from images import images03 from images import images04 from example.common import get_input_file_path from example.common2 import get_image_file_path import cv2 import codecs import glob import re from PIL import Image import numpy as np return_landmark = 0 return_attributes = None #calculate_all = 0 face_rectangle = '' beauty_score_min = 0 beauty_score_max = 100 def call_api(): data = { 'api_key': API_KEY, 'api_secret': API_SECRET, 'return_landmark': 1, 'return_attributes': 'gender,age,emotion' #'calculate_all': calculate_all, #'beauty_score_min': beauty_score_min, #'beauty_score_max': beauty_score_max } dir = 'images/images01/' files2 = glob.glob(dir + "*.jpg") for f in files2: name_list = [] # ファイル名の空リストを定義 ext_list = [] # 拡張子の空リストを定義 name_list2 = [] # ファイルのフルパスからファイル名と拡張子を抽出 file = os.path.basename(f) # 拡張子ありファイル名を取得 name, ext = os.path.splitext(file) # 拡張子なしファイル名と拡張子を取得 name_list.append(name) # 拡張子なしファイル名をリスト化 ext_list.append(ext) # 拡張子をリスト化 if face_rectangle in file: data.update({'face_rectangle': face_rectangle}) input_file = file #input_file = get_input_file_path(os.path.abspath(os.path.dirname(__file__)),f) if not input_file: print('画像ファイルを正しいディレクトリに置いてください') return files = { 'image_file': open(f, 'rb').read() } resp = requests.post(DETECT_PATH, data=data, files=files).json() with open('emotion.csv','w') as csv_file: writer = csv.writer(csv_file) for key, value in resp.items(): #writer.writerows(resp) (pd.DataFrame.from_dict(data=resp,orient='index').to_csv('emotion.csv',header=False)) osp = resp['faces'] #print(osp) df = pd.json_normalize(osp) df.to_csv('emotion2.csv') if __name__ == "__main__": call_api()

目的としてはemotion2.csvに追記していくことが目的です。

何か解決法があれば教えていただきたいです。

後半の行に書かれているospの値をprint関数で見てみると元々自分がcsvファイルに保存したいと思っていたデータ(for文により複数枚の画像の推定結果)が出力されていたのでこのospの値をcsvファイルに記述、書き込みしていくプログラムを書きたいです。

追記

resp = requests.post(DETECT_PATH, data=data, files=files).json() osp = [] with open('emotion.csv','w') as csv_file: writer = csv.writer(csv_file) writer.writerows(resp) for key, value in resp.items(): #writer.writerows(resp) (pd.DataFrame.from_dict(data=resp,orient='index').to_csv('emotion.csv',header=False)) osp.append(resp['faces']) print(osp) ################################################### with open('emotion2.csv','w') as f: writer2 = csv.writer(f) writer2.writerows(osp)

resp以下をこのように改変すると一回以上書き込まれるようになりましたが処理が五回で止まっています。
五回の情報がないわけでもないので何が原因で書き込みが終わっているのかがわからない状況です。
何か解決方法があれば教えていただきたいです。

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

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

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

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

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

meg_

2021/03/24 11:15

> 目的としてはwmotion2.csvに追記していくことが目的です。 「wmotion2.csv」はコード中に記述がないですがこのファイル名で間違いないですか?
Kokku

2021/03/24 18:24

emotion2.csvです。
y_waiwai

2021/03/24 23:13

で、現状のコードではどういう動作をしてどういう不具合があるんでしょうか
meg_

2021/03/25 02:54

あれ?コード変えられましたか?以前のコードでは何も書き込まれないとのことだったかと記憶していますが、今も同様ですか?
Kokku

2021/03/25 03:49 編集

少し改良しましたが今も同様です。
Kokku

2021/03/25 03:52

現状ではエラーなくプログラムは動いているのですが、emotion.csvやemotion2.csvを開いてみると一回目の情報しか書き込まれていないのですがこれを処理を行った画像の情報すべて書き込むようにしたいです。
meg_

2021/03/25 10:37

"一回目”の情報が保存されていますか?コードを見ると最後の情報が上書きされているように見えるのですが違うんでしょうか?
Kokku

2021/03/26 06:09

末尾に追記、修正しました。
guest

回答1

0

ベストアンサー

for f in files2:

の中で、毎回

with open('emotion.csv','w') as csv_file:

をやっているので、毎回ファイルをゼロから書き込んでいます。

解決策1
with open('emotion.csv','w') as csv_file:
の中で、
for f in files2:
を行う。

解決策2
openのmodeを新規書き込み(w)から追加書き込み(a)に変更する。
with open('emotion.csv','a') as csv_file:

のどちらでも修正できるはずです。

投稿2021/03/26 09:53

ppaul

総合スコア24666

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

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

Kokku

2021/03/26 15:10

自分が思っていた通りの動きをするようになりました。 本当にありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問