Pythonのコード上で、以下の文字列をリスト化しようと考えています
Python
1string = '"あいうえお, かきくけこ", "さしすせそ", aaaaa, "bbbbb, ccccc", ddddd, "たちつてと, eeeee", fffff, "わをん, xyz"'
当初はsplit(",")を試みましたが、その場合、""で囲まれた箇所のカンマ(例:"あいうえお, かきくけこ")も対象になってしまいます。
次にsplit("",")を試しましたが、その場合は、""で囲まれていない箇所のカンマ(例:aaaaa)が対象外になってしまいます。
あくまでも""で囲まれた範囲内のカンマは無視して、それ以外のカンマで区切ってリスト化したいと考えております。
最終的には、以下のようなリストを考えています。
Python
1list = [ 2 "あいうえお, かきくけこ", 3 "さしすせそ", 4 "aaaaa", 5 "bbbbb, ccccc", 6 "ddddd", 7 "たちつてと, eeeee", 8 "fffff", 9 "わをん, xyz" 10]
何か良い方法はありますでしょうか?
https://docs.python.org/ja/3/library/csv.html
これとか
https://pandas.pydata.org/
これとか。
面白そうなのでやってみましたが
標準ライブラリのCSVモジュールでは望みの結果がでませんでした。
import csv
str = '"あいうえお, かきくけこ", "さしすせそ", aaaaa, "bbbbb, ccccc", ddddd, "たちつてと, eeeee", fffff, "わをん, xyz"'
for row in csv.reader([str]):
for cell in row:
print(cell)
---
結果
あいうえお, かきくけこ
"さしすせそ"
aaaaa
"bbbbb
ccccc"
ddddd
"たちつてと
eeeee"
fffff
"わをん
xyz"
あいうえお, かきくけこだけうまくできているですね。よくわからないです。
> 当初はsplit(",")を試みましたが、
> 次にsplit("\",")を試しましたが、
単純な処理では無理です。文字列処理のみでやりたいならもっと工夫が必要です。
csvの仕様では、フィールド全体をダブルクォートで囲む必要があるので、今回の例文だとカンマの直後にスペースがあるため、ダブルクォートで囲まれている範囲を一つのフィールドと扱っていないのではないでしょうか。
コメントありがとうございます。
他の方の回答にもありましたが、CSV, StringIO, skipinitialspace=Trueを使用することでうまくいきました
回答2件
あなたの回答
tips
プレビュー