PythonでいろいろなCSVデータを読み込んでみた
PythonでいろいろなCSVデータを読み込んでみました。はたして意図通りに読み込めたでしょうか。
目次
読み込みテストに使用するスクリプト
テスト用のCSVデータはtest.csvというファイル名で保存します。実行環境はWindows10ですが、データの文字コードはUTF-8で改行コードはLFです。
スクリプトはこのようにしました。
import csv
with open('test.csv', mode='r', newline='', encoding='utf-8') as f:
csv_reader = csv.reader(f)
read_data = [row for row in csv_reader]
print(read_data)
ファイルから読み込んで、読み込んだデータを表示するだけのスクリプトです。
文字の種類とデータの型がどうなるのか確認する
まずはどのような型で読み込まれるのか見てみます。
test.csv # 入力
Alphabet,かな,0123,0.123
# 出力
[['Alphabet', 'かな', '0123', '0.123']]
数字はすべて文字列として読み込まれました。数字として使用する際には型変換が必要ですね。
区切り文字の前後のスペースの解釈
区切り文字前後にスペースを入れてみました。特にログファイルなどで数字とカンマの間にスペースを入れたりすることは多いのではないでしょうか。
test.csv # 入力
"いろは", "いろは" ,いろは, いろは ,123, 123
# 出力
[['いろは', ' "いろは" ', 'いろは', ' いろは ', '123', ' 123 ']]
区切り文字前後のスペースもデータの一部として扱われます。CSVの厳密なルールはそうなってます。
ダブルクォーテーションで括っても、その外側のスペースもデータ扱いになってますね。
データとして扱う際に注意が必要です。
エスケープの解釈
ダブルクォーテーションによるエスケープを試してみます。
test.csv # 入力
いろは にほへと,"いろは,にほへと","いろは
にほへと"
# 出力
[['いろは\tにほへと', 'いろは,にほへと', 'いろは\nにほへと']]
一番目のフィールドには、「いろは」と「にほへと」の間にタブが入っています。基準値では区切り文字がカンマになりますので、タブは文字として認識されました。
二番目のフィールドには、「いろは」と「にほへと」の間にカンマが入っています。ダブルクォーテーションでエスケープされているので、このカンマは区切りではない文字として認識されました。
三番目のフィールドには、「いろは」と「にほへと」の間に改行が入っています。ダブルクォーテーションによるエスケープがなければ改行はレコードの区切りになるのですが、改行文字として認識されました。
フィールドの数を確認しているか
レコードによってフィールドの数が異なっていたらどうなるのでしょうか。
test.csv # 入力
A1,B1,C1
A2,B2
A3,B3,C3,D3
# 出力 見やすいように成形しました。
[
['A1', 'B1', 'C1'],
['A2', 'B2'],
['A3', 'B3', 'C3', 'D3']
]
フィールドの数が増減してもエラーにはならないし、数を合わせてもくれないのですね。 1行ずつ読み出してるからでしょうか。
リストの長さがあっているかどうかの確認が必要ですね。
公開日
広告