データ分析実践
中級問題チェック
問題 3 /40
次のCSVファイルに含まれている改行コード「\r\n」を、「\r\n」のまま読み込む場合、open関数の正しい引数はどれか。
sample.csv
-------------------------------
"name","comment"
"tanaka","aaa \r\n bbb"
-------------------------------
選択 1
newline引数を付けない
選択 2
newline=None
選択 3
newline=''
選択 4
引数による違いはない
解説
選択肢3が正解です。
現在のシステムで使われている改行コードは次の2つです。
Mac、Linux ▶︎ \n
Windows ▶︎ \r\n
改行コードが含まれているファイルをopen関数で読み書きする際、newline引数の指定によって処理が変わります。
【読み込み時】
newline=None または newline引数を付けない
▶︎ 改行コードを\nに変換する
newline=''
▶︎ 改行コードは変換せず、元の改行コードのまま処理する
【書き込み時】
newline=None または newline引数を付けない
▶︎ \nを自身のシステムの改行コードに変換して書き出す
newline=''
▶︎ 改行コードを変換せず、そのまま書き出す
次の★★★に各引数を入れて読み込んだ場合を考えます。
import csv
with open('sample.csv', ★★★) as f:
reader = csv.reader(f)
for row in reader:
print(row)
sample.csv
-------------------------------
"name","comment"
"tanaka","aaa \r\n bbb"
-------------------------------
【選択肢1】
newline=None
▶︎
['name', 'comment']
['tanaka', 'aaa \n bbb']
誤った結果です。
改行コードを\nに変換するため、\r\nが\nに変換されます。
【選択肢2】
newline引数を付けない
▶︎
['name', 'comment']
['tanaka', 'aaa \n bbb']
誤った結果です。
選択肢1のnewline=Noneと同じ処理です。
【選択肢3】
newline=''
▶︎
['name', 'comment']
['tanaka', 'aaa \r\n bbb']
正しい結果です。
改行コードは変換されず、元のままです。
【選択肢4】
引数による違いはない
誤った説明です。
選択肢1・2と3で違いがあります。
newline=''をつけた場合は、\r\nを\r\nのまま読み込みます。newline引数をつけなかった場合は、\r\nが\nに変換されます。
WindowsとMac・Linuxで改行コードが異なっていたり、クライアントとサーバで改行コードが異なる場合があるため、注意が必要です。
(公式書籍 p.30)