【python】csvファイルを読み込む

【python】csvファイルを読み込む

 日々の業務の効率化のためにCSVファイルを読み込みたい時があると思います。今回はファイルの読み込みとpythonでのデータの扱い方を紹介します。(※もっと美しい書き方もあると思います。スタイリッシュなコードをお求めの方は他のサイトを参照ください)

csvファイルの読み書きのモジュールを下記で公開していますのでよろしければ本記事と合わせて参照ください。
https://sun-sun-sunday.com/python/python_csv_easy/

サンプルプログラム

import codecs 
from os import path


####読み込むファイルのパス指定####### 
r_filename="read.csv"
r_path = path.join(path.dirname(__file__), r_filename)



#####ファイルの読み込み##########
r_txt = codecs.open(r_path, 'r', 'UTF-8')
r_txt_list = []
for line in r_txt:
    r_txt_list.append(line)
r_txt.close()
print(r_txt_list)
###################################



######「\r\n」消去######
row=[]
for x in r_txt_list:
    y=x.find("\r\n")
    b=x[0:y]
    row.append(b)
print(row)
#########################


##CSVファイルの2列目のみを取り出す##
row2=[]
for x in row:
    y=x.find("<*>")
    b=x[y+3:len(x)]
    row2.append(b)

print(row2)
#########################

x1=row2[3]
x2=row2[4]
print(x1+x2)#############文字列として足し算
print(int(x1)+int(x2))###数字として足し算

実行結果

【read.csv】
 サンプルプログラムと同じフォルダに置いてください。ここでは<*>が列を分けるための文字列になっています。

a<*>あいうえお
b<*>かきくけこ
ac<*>100
dc<*>200
ec<*>300
fc<*>400

解説

 18行目まででcsvファイルの読み込みは完了しています。このまま使用しても構いませんが、扱いづらいと思いますので22から40行目を使ってcsvファイルの2列目のデータだけを取り出しています。
 42行目以降で列のデータを取り出して計算をしています。44と45行目の結果からわかりますが、取り出したデータは文字列として扱われているので、数値として扱いたいときはintなどで数値化してあげてください。

参考:CSVファイルの扱い方について

 CSVファイルの扱いについて、私の環境ではMicrosoft officeがないのでフリーソフトのopen officeを利用しています。参考までに使い方を紹介します。

【読み込むファイルの準備】
 メモ帳で「.csv」でデータを保存してください。文字コードはpythonで扱うことも考えてUTF-8がおすすめです。
 私の作ったread.csvは<*>で列を区切っています。おかしな文字列ですが、pythonで処理するのであれば、どんなものでも大丈夫だと思います。
 筆者はwebスクレイピングしたデータをcsvで保存するときに、ありきたりな文字列だと被ってしまってCSVのレイアウトがおかしくなるのでいろんな文字列を使っています。ほかに回避方法がある方は「;」とか「\」とかで問題ありません。

【open officeのインストール】
http://www.openoffice.org/ja/download/ からダウンロードできます。
赤枠でくくったボタンをクリックすれば自動的にダウンロードが開始されます。ダウンロード後はインストーラの指示に従ってインストールください。

【open officeでcsvファイルの読み込み】
 作成したcsvファイルを読み込むと下のような画面が表示されます。文字列をメモ帳で保存したUTF-8に指定して、区切りを自分で指定したものにしてください。今回は「その他」で<*>としました。左下にプレビューが出ますが、列に空欄が出るようであれば「フィールド区切りの結合」にチェックを入れてください。OKボタンを押すと読み込めます。エクセルのように扱えるので便利です。※上書き保存をすると<*>の部分が自動でほかの文字列に代わるので私のように特殊な文字列を使っている人は注意してください。

あとがき

 今回はCSVファイルの読み込みについて記載しました。今回は記載できなかったので後日記載しますが、書き込みがしたい場合は読みと逆のことをすればいいです。
 使いやすいモジュールやもっとわかりやすいコードの書き方もあると思いますが、プログラムの動きが分からなくなるので、私はこの方法で読み込みを行っています。※Excelファイル(.xls, .xlsx)を扱うときはxlwtなどのモジュールを使うことをお勧めします。