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

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

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

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

Q&A

解決済

2回答

1026閲覧

pythonで10,20,\n30,20,\n...となっているものを2列でcsvファイルを作りたい。

meJ15

総合スコア55

Python 3.x

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

0グッド

0クリップ

投稿2018/11/23 07:12

前提・実現したいこと

pythonを使ってcsvファイルを作りたい。
文字列として
arr = "655,551,\n655,551,\n613,554,\n655,551,\n655,551,\n"
という感じでデータがあります。
これを\nで改行して,(カンマ)で区切ってcsvファイルを作りたいです。
655 551
655 551
613 554

のような感じです。

発生している問題・エラーメッセージ

csvファイルが意図したように作れない。

該当のソースコード

python

1  print(arr) 2 arr = arr.replace(',\n','\n') 3 arr = arr.strip("\n") 4 print("\n") 5  print(arr) 6 7 with open('data.csv', 'w') as file: 8 writer = csv.writer(file, lineterminator='\n') 9 writer.writerows(arr)

試したこと

最初のprint (arr)では
655,551,
655,551,
613,554,
,,,
となっています。

そのあとのprint(arr)では
655,551
655,551
613,554
,,,
となっていてこのデータを書き込みたいのですが
イメージ説明

こんな風になってしまいます。

writer.writerow(arr)とすると
イメージ説明
なってしまいます。
どこを変えればよいのでしょうか?

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

元のソースを生かすと、以下のようにも書けます。
最後に余計な1行も書き込まれますが、改行のみなので実質問題ないでしょう。

Python

1arr = "655,551,\n655,551,\n613,554,\n655,551,\n655,551,\n" 2arr = arr.replace(',\n','\n') 3arr = arr.split("\n") # 改行で区切ったリストに 4 5import csv 6with open('data.csv', 'w') as file: 7 for l in arr: 8 file.write(l+'\n') # リストの要素をそのまま改行をつけて書き込む

投稿2018/11/23 07:30

can110

総合スコア38266

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

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

0

ベストアンサー

要するに、二次元リストを作って writerows に放り込めば良いのです。
段階を踏んで考えましょう。

####改行文字で分割する

Python

1>>> arr = '655,551,\n655,551,\n613,554,\n' 2>>> 3>>> arr = arr.split() 4>>> arr 5['655,551,', '655,551,', '613,554,']

####邪魔なカンマを除去する
いわゆる『ケツカンマ』を除去します。

Python

1>>> arr = [e.rstrip(',') for e in arr] 2>>> arr 3['655,551', '655,551', '613,554']

####カンマで区切り、二次元リストにする

Python

1>>> arr = [row.split(',') for row in arr] 2>>> arr 3[['655', '551'], ['655', '551'], ['613', '554']]

####csvファイルに書き出す
作った arr を writerows に渡せば良いです。


慣れればもっと簡潔にも書けますが、
まずは直面している問題を一つずつ分解して処理していくのが大事です。

うまくいかなかった原因

このデータを書き込みたいのですが ... こんな風になってしまいます。

Pythonの文字列が巡回可能(iterable)であるためです。

Python

1>>> list('spam') 2['s', 'p', 'a', 'm'] 3>>> list('s') 4['s']

csvに文字列を書き込もうとしてハマっている人はしばしば見ます。

投稿2018/11/23 07:23

編集2018/11/23 07:31
LouiS0616

総合スコア35660

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

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

meJ15

2018/11/23 07:43

回答ありがとうございます これ以上ないほどわかりやすいです、段階を踏んで処理できるように頑張ります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問