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

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

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

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

Q&A

解決済

2回答

4480閲覧

文字列の前後にダブルクオーテーションを追加して、csvファイルに出力したい

taka3391

総合スコア5

Python

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

0グッド

0クリップ

投稿2023/03/10 02:16

編集2023/03/10 02:17

実現したいこと

文字列の前後にダブルクオーテーションを追加したいです。以下のようにダブルクオーテーションを追加して、csvファイルに書き出すと、なぜかダブルクオーテーションが3つ並んで書き込まれています。
printするとダブルクオーテーションは1つです。

csvファイルでも、ダブルクオーテーションを1つにして出力するにはどうしたら良いでしょうか。

python

1import csv 2 3test = 'test' 4test2 = '\"' + test + '\"' 5 6with open('test.csv', 'w', newline='', encoding='utf-8') as f: 7 writer = csv.writer(f) 8 writer.writerow([test2]) 9 10print(test2)

出力結果(csvファイル)

"""test"""

出力結果(print文)

"test"

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

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

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

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

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

guest

回答2

0

ベストアンサー

なぜかダブルクオーテーションが3つ並んで書き込まれています。

これは、csvの仕様に沿った正常な動作です。 「"test"」というダブルクォーテーションを含む文字列をcsvに入れたい場合は、それがcsvでの文字列を囲う「"」と区別する必要があるからです。
詳細は以下の 2-7 にあるとおりです。
http://www.kasai.fm/wiki/rfc4180jp

フィールドがダブルクォーテーションで囲まれている場合、フィールドの値に含まれるダブルクォーテーションは、その直前にひとつダブルクォーテーションを付加して、エスケープしなければならない。

ようするに、「"""test"""」の 一番外側の「"」はcsvの文字列を囲むもので、testの前後に文字としての「"」を付けるために 「""」を配置しているのです。

質問者さんの要求が、「csvに含まれる文字列が""で囲まれるようにしたい。」ということであれば、以下のようにすればいいでしょう。

python

1import csv 2 3test = 'test' 4 5with open('test.csv', 'w', newline='', encoding='utf-8') as f: 6 writer = csv.writer(f, 7 quotechar='"', 8 quoting=csv.QUOTE_ALL) 9 writer.writerow([test])

デフォルトが「"」なので、quotecharの指定は無くてもOKです。
csv.QUOTE_ALL だと数値も囲われますが、他のもあるので合うものを使ってください。

投稿2023/03/10 03:04

TakaiY

総合スコア13785

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

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

0

常に「"」で囲んで出力したいという意図であれば、元の文字列はそのままでwriterにquoting=csv.QUOTE_ALLを指定すればよいです。

Python

1import csv 2 3test = 'test' 4test2 = test 5 6with open('test.csv', 'w', newline='', encoding='utf-8') as f: 7 writer = csv.writer(f, quoting=csv.QUOTE_ALL) 8 writer.writerow([test2])

投稿2023/03/10 02:42

can110

総合スコア38341

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問