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

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

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

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

Python

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

Q&A

解決済

3回答

18527閲覧

python csvファイル改行削除

watarijin

総合スコア10

CSV

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

Python

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

0グッド

2クリップ

投稿2018/03/10 10:00

csvファイル
['abc\ndef\nghi','jkl\nmno\npqr','stu\nvwx\nyz']
改行コードを削除したい。
readerで読み込んだファイルは削除できますが、
writerで読み込むとエラーが出ます。

for row in reader:
TypeError: '_csv.writer' object is not iterable

何がおかしいのかご教示ください。

#readerで読み込むと改行を削除できるコード
import csv
list=[]
text=''
with open('example.csv','r',newline='') as f:
reader=csv.reader(f,delimiter=',')
for row in reader:
list+=row
for i in range(len(list)):
text=list[i]
list[i]=text.replace('\n','')
print(list)

結果:['abcdefghi','jklmnopqr','stuvwxyz']

#writerで読み込むとエラーが出るコード
import csv
list=[]
text=''
with open('example.csv','w',newline='') as f:
writer=csv.writer(f,delimiter=',')
for row in writer:
list+=row
for i in range(len(list)):
text=list[i]
list[i]=text.replace('\n','')

結果: for row in reader:
TypeError: '_csv.writer' object is not iterable

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/03/10 11:00

writerはファイル書き込み用で読み込み用ではありませんが…
guest

回答3

0

ベストアンサー

Excelから出力したCSVファイルから、セル内改行を除去したいということであれば以下でできます。

Python

1import csv 2# 読込 3rows = [] 4with open('in.csv','r') as f: 5 reader = csv.reader(f) 6 for row in reader: 7 # セル内改行を除去 8 for i,v in enumerate(row): 9 row[i] = v.replace('\n', '') 10 rows.append(row) 11# 書込 12with open('out.csv','w', newline='') as f: # 読込同名ファイルに上書きでもよい 13 writer = csv.writer(f, dialect='excel') # dialect='excel' は指定しなくてもよい 14 for row in rows: 15 writer.writerow(row)

in.csv

PlainText

1ab,"cd(\n) 2ef",gh(\r\n) 3ij,kl,mn(\r\n)

out.csv

PlainText

1ab,cdef,gh(\r\n) 2ij,kl,mn(\r\n)

(\n)は改行、(\r\n)は復帰改行です。

投稿2018/03/12 02:32

can110

総合スコア38266

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

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

watarijin

2018/03/12 05:25

ご教示いただきありがとうございます。 解決できました。助かりました。 readerとwriterで同じ動作をさせようとしたところが悪かったです。 私の手続きが多いコードを簡素化してもらいありがとうございます。
guest

0

example.csvの形式が分からないので

改行コードを削除したい

という点に対しては、読み込んだセルの文字列に対して.slpit("\n")で分割すればいいように思います。

Python

1s = ['abc\ndef\nghi','jkl\nmno\npqr','stu\nvwx\nyz'] 2t = [_s.split("\n") for _s in s] 3# [['abc', 'def', 'ghi'], ['jkl', 'mno', 'pqr'], ['stu', 'vwx', 'yz']]

投稿2018/03/12 02:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

watarijin

2018/03/12 05:33

リスト内包表記の書き方勉強になります。 ご教示ありがとうございます。
guest

0

こんなことがしたいのかな?と思ってコードを書いてみました。

example.csv (スクリプト実行前)

csv

1abc\ndef\nghi,jkl\nmno\npqr,stu\nvwx\nyz

main.py

Python

1from pathlib import Path 2 3filename = 'example' 4src_file = Path(f'{filename}.csv') 5dst_file = Path(f'{filename}_dst.csv') 6 7with src_file.open() as fin, dst_file.open('w') as fout: 8 for row in fin: 9 fout.write(row.replace(r'\n', '')) 10 11dst_file.replace(str(src_file))

example.csv (スクリプト実行後)

abcdefghi,jklmnopqr,stuvwxyz

csvで読み取る必要性が感じられなかったので、ただのテキストファイルとして処理しています。

気になったところ

listは**変数名として使ってはいけません。**分かりづらいエラーを引き起こします。

Python

1>>> list = list(range(3)) 2>>> list 3[0, 1, 2] 4>>> 5>>> list2 = list(range(4)) 6Traceback (most recent call last): 7 File "<stdin>", line 1, in <module> 8TypeError: 'list' object is not callable

他にも max int input id set sum str なども誤って使ってしまいがちです。

質問のコードの書き方について

teratailには、上記のようにコードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。

投稿2018/03/10 11:35

LouiS0616

総合スコア35660

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

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

watarijin

2018/03/12 00:00

早速ご指導いただきありがとうございます。 自分でもコードを入れてやってみましたが、この状況ではうまくいくようです。しかし、今回壁にぶつかったのが、エクセルのセル内改行を削除しなければならなかったのが、このやり方ではできないようでした。 説明不足で申し訳ございません。 もう少し試してみます。 どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問