Python学習にファイル操作とcsvの扱い方を触っていて、少し例題に躓いた。
『例題:数行のリストを作成して、そのリストの要素を一行ずつ出力する』
を、まず作成してみる
import csv
data = [['一行目のデータ'],['二行目のデータ'],['三行目のデータ']]
with open("'ファイル名'.csv", "w") as f:
w = csv.writer(f, delimiter=",")
for data_list in data:
w.writerow(data_list)
出力結果
ヘッダー |
---|
一行目のデータ |
【空白】 |
二行目のデータ |
【空白】 |
三行目のデータ |
あれ? 何故か空白が入りますね・・・?
はて、open optionを入れ忘れていることに気がつきました。
open のOptionに"newline"を入れておきます。
import csv
data = [['一行目のデータ'],['二行目のデータ'],['三行目のデータ']]
with open("'ファイル名'.csv", "w", newline="") as f:
w = csv.writer(f, delimiter=",")
for data_list in data:
w.writerow(data_list)
出力結果
ヘッダー |
---|
一行目のデータ |
二行目のデータ |
三行目のデータ |
OKです。
さてと、open関数のoption [newline] の役割がわかっていません。調べます。
「Newlineはuniversal newlinesモードの制御内容を記載するもの」ということですね。リンク
なるほどtextモードでのみ働くのと、行セパレータos.linesepにどのように翻訳されるかを指定する。
折角なのでまとめてみます。
組み込み関数open のnewlineは・・・
ストリームR/W条件⇒ | 入力読み込み時 | 出力の書き込み時 |
---|---|---|
None | *1 | 全て"\n"文字を改行セパレータへ翻訳 |
"" | ユニバーサル改行モードを有効で行末は無変換 | 改行セパレータ翻訳しない |
"\n" | *1 | 改行セパレータ変換しない |
"\r" | *1 | (改行セパレータへ変換)*2 |
"\r\n" | *1 | (改行セパレータへ変換)*2 |
*1:入力中の行は"\n","\r"または"\r\n"で終端され、呼び出し元に返される前に"\n"に切り詰められる。
*2:Documenntに記載ないようですが、試してみるとこの結果でした。
以上でした!