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

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

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

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

Python

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

Q&A

解決済

2回答

808閲覧

【Python】文字列連結をしたい

s_akira

総合スコア15

CSV

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

Python

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

0グッド

0クリップ

投稿2018/07/27 00:46

編集2018/07/28 18:33

データの中身を以下のようにしたい。が文字列連結ができなくて困っています。。
また、連結した場合に1行目の値しか出力されない。

csv

1yyyy-mm-dd,aaa,bbb,ccc,ddd,eee 2yyyy-mm-dd,aaa,bbb,ccc,ddd,eee 3        ・ 4        ・

python

1cur.execute("SELECT DISTINCT id FROM h") 2id_list = cur.fetchall() 3 4for id in id_list: 5 cur.execute("SELECT code FROM e WHERE id = %s",id) 6 info_list = cur.fetchall() 7 8 s = '' 9 10    datetime_now = datetime.datetime.now() 11 date_now = datetime_now.date() 12 13 for i in info_list: 14 # 文字列連結 15 # s += date_now.strftime('%Y-%m-%d') + ',' + ','.join(map(str,id + review_info)) + '\r\n' 16 s = date_now.strftime('%Y-%m-%d') + ',' + ','.join(map(str,id + review_info)) 17 s += s 18 19 cur.execute("INSERT INTO e( id, code) VALUES(%s, %s)", id + info) 20 print(cur.statusmessage) 21 conn.commit() 22 23 # ファイルオープン 24 f = open('output.csv', 'w') 25 writer = csv.writer(f, lineterminator='\n') 26 27 # データをリストに保持 28 csvlist = [] 29 csvlist.append(review_info_list) 30 31 # 出力 32 writer.writerow(csvlist) 33 34    # ファイルクローズ 35 f.close() 36 print(s)

7行目で、yyyy-mm-dd,aaa,bbb,ccc,ddd,eeeの形に変更して、+=としても連結しても、連結されずに単一のものが、print(s)で、yyyy-mm-dd,aaa,bbb,ccc,ddd,eeeが出力されます。
yyyy-mm-dd,aaa,bbb,ccc,ddd,eeeのなかに、decimal形式含んでいます。
参考の内容を試すと連結がされることを確認しています。。。

参考

【Python入門】list joinで文字列を連結する方法

すみませんがよろしくお願い致します。

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

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

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

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

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

coco_bauer

2018/07/27 00:58

review_info_list という変数が、定義も初期化もされないまま使われていますが、どんな値が入っていることを前提にしているのでしょうか? hotel_idも未定義ですよね。 ソースコードは端折らず全体を質問に含めてください。
s_akira

2018/07/28 18:35

ご回答ありがとうございました。
guest

回答2

0

自己解決

1.文字列連結ができなくて困っています

無駄に s += s をしていたためでした。不要なので削除.文字列連結はできてました。。。

2.連結した場合に1行目の値しか出力されない。

for文の途中に初期化作業を入れていたのでまずかったです。1回目のfor文の頭に移動しました。

###修正

python

1cur.execute("SELECT DISTINCT id FROM h") 2id_list = cur.fetchall() 3 4s = '' 5 6datetime_now = datetime.datetime.now() 7date_now = datetime_now.date() 8 9for id in id_list: 10 cur.execute("SELECT code FROM e WHERE id = %s",id) 11 info_list = cur.fetchall() 12 13 for i in info_list: 14 # 文字列連結 15 s += date_now.strftime('%Y-%m-%d') + ',' + ','.join(map(str,id + review_info)) + '\r\n' 16 17 cur.execute("INSERT INTO e( id, code) VALUES(%s, %s)", id + info) 18 print(cur.statusmessage) 19 conn.commit() 20 21with open("file.csv","w") as fs: 22 fs.write(str(csvlist)) 23 24conn.close()

投稿2018/07/28 18:30

編集2018/07/28 18:34
s_akira

総合スコア15

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

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

0

7行目で、yyyy-mm-dd,aaa,bbb,ccc,ddd,eeeの形に変更していますが+=としても連結ができません。 ファイルclose後のprint(s)で出力すると、yyyy-mm-dd,aaa,bbb,ccc,ddd,eeeしか出てこず、連結がされていません。

ここのところが何が言いたいか良く分かりません。「[yyyy-mm-dd,...]の形に変更していますが(中略)[yyyy-mm-dd,...]しか出てこず」その形にしているのだからその形しか出てこないのは当然ではないのでしょうか?

あと、ファイルには変更したsではなく、csvlist.append(review_info_list)を書いているのも意図したものですか?(csvlist.append(s)ではない?)

投稿2018/07/27 00:58

papinianus

総合スコア12705

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

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

s_akira

2018/07/28 18:32

分かりづらく申し訳ありません。(もっと落ち着きます、、、) 回答ありがとうございますした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問