データ分析実践
中級問題チェック

問題 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)