PythonをつかってCSV形式で読み書きしたいけど、やり方がわからない。。。
こんな疑問を解決します。今回はCSV形式でデータを扱うための方法についてまとめました。
この記事を読めば、CSVファイルを読み込んだり、データを保存することができるようになります。
僕自身が勉強していて気付いたことなのですが、機械学習でもスクレイピングでも、何かしらデータを保存する方法が必要になります。
目的が違うコードでもデータの保存時にはCSV形式を使っていることが多かったので、初心者のうちから覚えておくことをおすすめしたいです。
この記事ではCSV形式のデータを扱う方法について、初心者から中級者になるまでに必要な部分をまとめてみました。
■PythonでCSV形式で読み書きする方法
わからない方へ向けて、簡単にCSV形式について説明しておきますと、CSV形式とは、データの1つ1つが”,(コロン)”で区切られている形式のことを指します。
例えば、[[“りんご”], [“みかん”]]のようなリストをCSV形式で保存した場合は、”りんご”, “みかん”のように保存されていきます。
さて、前置きが長くなりましたが、CSV形式で読み書きする基本的な部分を解説していきます。
まず初めに、CSVファイルを読み書きするために、CSVモジュールをインポートしましょう。
1 |
import csv |
・CSVファイルに書き込む、保存
CSVファイルに書き込むコードは、以下の通りです。listという名前のリスト型データをcsvfile.csvというファイルに書き込みを行います。
1 2 3 4 5 |
list =[["りんご"],["みかん"]] with open("file.csv", "a", newline='', encoding="utf-8") as wf writer = csv.writer(wf, lineterminator="\n") writer.writerow(list) |
<3行目(with open~~)の説明>
“file.csv”:保存するCSVファイルの名前
”a”:ファイルの開き方を指定する文字列。ファイルディスクリプタという。”a”は追記モード
newline=’ ‘:Python3系だとopen時に要素間に空欄ができる。この現象を防ぐために必要
encoding = “utf-8”:utf-8の文字コードで保存する。エディタ間で一致させておかないと文字化けを起こす
<4行目( writer = csv~~)の説明>
CSVモジュール内のwriterオブジェクトを使う宣言。
lineterminator=”\n”:改行で区切るように保存する
<5行目(writer.writerow(list))の説明>
上で宣言したwriterオブジェクト内のwriterowメソッドで書き込み。
writerowで書き込むと、改行せずに各要素を書き込みます。
ex) りんご, みかん
writerowsで書き込むと、改行して各要素を書き込みます。
ex)
りんご
みかん
基礎的なCSV形式での書き込み方法は以上です。
・CSVファイルを読み込む
次にCSV形式で保存したデータを読み込む方法について解説します。
もっとも基礎的なコードは以下のとおりです。
1 2 3 4 5 6 7 |
import csv list = [] with open("file.csv", "r", newline='', encoding="utf-8")as rf: csv.reader(rf, lineterminator="\n") for row in rf: list.append(row) |
先の書き込みのコードと異なるのは5行目のreaderオブジェクトを使っている部分です。CSVファイルを読み込む際に必要になります。
ちなみに、CSVモジュールは、各行をリストとして読み込みます。そのため、6行目以降のようにfor row in f:と記述すると、読み取ったデータを改行しながら処理することができます。
上のコードでは、listという名前のlist型変数に、1行ずつ読み込みを行っています。
ここまでで、CSV形式でデータの読み込みを行う方法の解説は終わりになります。
■CSVモジュールを使いこなすために覚えておくべき内容
さて、基礎的なCSV形式の読み書きの方法を理解したところで、CSVモジュールを使いこなすために覚えておくべきことを2つほど紹介します。
・ファイルディスクリプタ
with open(“file.csv”, “r”, newline=”, encoding=”utf-8″)as rf:
の際に使われた” ”で囲われた文字列のことをファイルディスクリプタをいうんでしたね。
このファイルディスクリプタには、いくつか種類があるので覚えておくと後々重宝します。特に、追記の”a”と書き込み専用の”w”は使い分けられるようにしておきましょう。
文字列 | 説明 |
---|---|
‘r’ | ファイルを読み込み専用で開く. |
‘w’ | ファイルを書き込み専用で開く. 既存のデータは失われる |
‘a’ | ファイルの末尾に追記する. |
‘r+’ | ファイルを更新する. |
‘w+’ | 既存データを削除し、ファイルを読み書き用に開く. |
‘a+’ | ファイルを読み書き用で開き、ファイルの末尾から記述. |
‘b’ | バイナリーモードで開く. |
・CSVモジュールのメソッド一覧
CSVモジュールで扱えるメソッドには、以下のようなものがあります。全部を覚える必要はありませんが、必要に応じて使いこなすと便利ですね。
CSVモジュールのオブジェクト名 | CSVモジュールのメソッド | 説明 |
---|---|---|
open() | ファイルを開く。CSV形式でなくともファイル類を扱う上で必須 | |
reader | read() | ファイルを読み込む |
reader | readline() | ファイルを1行分を読み込んで、文字列を返す |
reader | readlines() | ファイルの全文を読み込み、リストを返す |
writer | write() | ファイルに書き込む |
writer | writerow() | ファイルに改行せずに書き込みを行う=横に要素が並べぶ |
writer | writerows() | ファイルに改行しつつ書き込みを行う=縦に要素が並ぶ |
close() | ファイルを閉じる ※withを使ってファイルを開いた際は不要 |
各メソッドを扱う際は、オブジェクトの定義が必要になりますので、具体的には以下のようなコードで使うことができます。
1 2 3 4 5 6 7 8 |
with open("file.csv", "a", newline='', encoding="utf-8") as wf: writer_hensuu = csv.使用したいオブジェクト(wf, lineterminator="\n") writter_hensuu.使用したいメソッド(扱うデータ) #具体例 with open("file.csv", "a", newline='', encoding="utf-8") as wf: writer = csv.writer(wf, lineterminator="\n") writer.writerow(list) |
■まとめ
いかがでしたでしょうか。CSV形式はデータを扱うもっともベーシックな形式だそうなので、覚えてようとしなくても、自然と覚えられます。
しかし、前もって覚えておくと、コーディング時に余計な検索をしなくて済むのでPythonを始めたばかりの方には特に覚えておくことをおすすめしたいです。
以上になります。最後まで読んでいただきありがとうございました。
独学でPythonをやっている方におすすめです。基礎的な文法を抑えた方が、プログラマとして働くために必要なスキルを学べる書籍です。Pythonを仕事にしたい方は読んでも損がないです。