伊田生活ブログのロゴ
HOME  >  勉強
カテゴリー : 勉強 - プログラミング
•Python •CSV
公開日:

PythonでCSVファイルを読み込んで各要素を読み取る


img_2
2024年12月

PythonでCSVファイルを読み込んで、各行の各要素を読み取ることを考えます。


以下のようなCSVデータがあるとします。

[sample_csv.csv]
0000,あいうえお,AAAA
1111,かきくけこ,BBBB
2222,さしすせそ,CCCC

このCSVファイルを読み込んで、改行コードで分割し、分割した各行をリストに格納します。(この例では行数は3なので、リストの要素数は3となります。)


「import csv」と記述してCSVモジュールを使用を使用する方法もあるようですが、この記事ではその方法は使用せず、「split」を利用して改行コードで分割する方法を使用します。

ファイル(sample_csv.csv)からテキストデータを読み込んで、改行コードで分割し、リストに格納するサンプルコードを以下に示します。

FILE_PATH = './sample_csv.csv'

def readText():
    f = open(FILE_PATH, 'r', encoding='UTF-8')
    data = f.read()
    f.close()
    return data.strip()

class csvData:
    lines = []
    
    def __init__(self):
        text = readText()
        self.lines = text.split('\n')
        print(type(self.lines))
        print(self.lines)

obj = csvData()

このコードを実行すると、以下のように表示されます。

img_1

リストの各要素を個別に取得するには、「split」を使ってカンマ (,) で分割するといいでしょう。

読み込んだCSVデータが仕様通りかどうか確認する為の処理を追加したサンプルコードを以下に示します。

import sys

FILE_PATH = './sample_csv.csv'

def readText():
    f = open(FILE_PATH, 'r', encoding='UTF-8')
    data = f.read()
    f.close()
    return data.strip()

class csvData:
    lines = []
    
    def __init__(self):
        text = readText()
        self.lines = text.split('\n')
        #print(type(self.lines))
        #print(self.lines)
        self.__checkLines()
    
    def __checkLines(self):
        c = 0
        for x in self.lines:
            c = c + 1
            if x.count(',') != 2:
                print(f'","の数が不正です。{c}')
                sys.exit()

obj = csvData()

このコードは、リストの要素を1つずつ見ていって、カンマの数が2以外の場合にエラーメッセージを表示して処理を終了します。たとえば、以下のデータを読み込ませたとします。

0000,あいうえお,AAAA
1111,かきくけこ,BBBB
2222,さしすせそ,CCCC,

これは、3行目の末尾に余分なカンマが付いています。このようなデータのとき、コードを実行すると、以下のように表示されます。

img_2

このエラーメッセージは、データの3行目が不正であることを示しています。


PythonでCSVファイルを読み込んでデータを処理するための、簡単なコードをご紹介しました。CSVファイルを読み込むだけなら、CSV用のモジュールをインポートしなくても、ある程度は対応できそうです。