みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けにPythonの基本中の基本をフォルダ作成ツールを作りながら学ぶシリーズです。
前回の記事はコチラ!
with文を使って安全かつスッキリファイルを開く方法をお伝えしました。
ファイルと言えば、よくプログラミングで取り扱うファイル形式としてcsvファイルがありますよね。
Pythonのディストリビューションには、当然ながらcsvモジュールもありまして、おかげでcsv形式のデータを簡単に読み書きができるのです。
ということで、今回はPythonでcsvファイルをデータを読み込む最初の一歩についてお伝えします。
では、行ってみましょう!
csv形式とは
csv形式というのは「Comma-Separated Values」つまりカンマ区切りのデータということであります。
単純な例ですが、以下のような形式で、1つのレコードを1行で、レコードの各データをカンマで区切ります。
構造が単純で、プレーンテキストファイルで保存できますので、アプリケーション間のデータのやり取りによく使われまして、csv形式の拡張子csvのテキストファイルをcsvファイルと言います。
Pythonでcsvファイルのデータを読み込む方法
さて、Pythonでcsvファイルを読み込む場合、以下のような流れとなります。
- csvモジュールのインポート
- csvファイルを開く
- 開いたcsvファイルを渡してReaderオブジェクトを生成
- Readerオブジェクトから一行ずつデータを取得
ちょっとややこしそうですが、一つ一つクリアしていけば、それほど難しいものではありませんよ。
csvモジュールのインポート
Pythonでcsv形式のデータを取り扱う場合には、標準ライブラリに含まれているcsvモジュールを使うのが便利です。
以前お伝えしたsplitメソッドでカンマを区切り文字に指定すればよいなどと思うかもしれませんが、データにカンマが含まれちゃっている場合とか、csvモジュールのほうが確実に処理をしてくれるのでおとなしくcsvモジュールを使いましょう。
以下記述でcsvモジュールをインポートできます。
あ、ちなみに、インポートするモジュールが他にosモジュールもあったりした場合は、カンマ区切りで複数指定できますよ。
import os,csv
csvファイルを開く
ここは特別なことはなくて、これまでお伝えしてきたテキストファイルを開くのと同様にcsvファイルを開けばOKです。
例えば、area.csvというファイル名であれば、以下コードで開くことができます。
import os,csv
with open('area.csv') as f:
# 処理
Readerオブジェクト
次の段取りが重要なのですが、開いたcsvファイルのファイルオブジェクトを渡して、Readerオブジェクトというオブジェクトを生成します。
csvファイルからReaderオブジェクトを生成するには、csv.reader関数を使います。
これで、Readerオブジェクトが生成されて変数に格納されます。csvfileにはcsvファイルのファイルオブジェクトを指定します。
このようにしてできたReaderオブジェクトはcsv形式のデータを
- csvのデータを行単位で保有
- 各行はリスト形式
という形で持ちます。
Readerオブジェクトのデータをforループで取り出す
試しに、どんな内容なのか見てみましょうか。
Readerオブジェクトは、以下のようにすれば、forループで一行ずつのデータを取り出すことができます。
# 処理
つまり、以下のようなコードですね。
import os,csv
with open('area.csv') as f:
reader = csv.reader(f)
for row in reader:
print(row)
これを実行しますと、Shellウィンドウには以下のように表示されます。
これで、Readerオブジェクトがどのようにcsvデータを取り出したのかというのが、よくわかりますね。
一点注意ですが、forブロックに入る前にwithブロックを閉じたくなりますが、Readerオブジェクトにアクセスするには、csvファイルのファイルオブジェクトが開いている必要がありますので、forブロックもwithブロック内に入れることになります。
csvファイルからフォルダ名を生成してフォルダ作成
では、ここまでの内容をふまえて、csvファイルのデータからフォルダ名を生成して、作業フォルダにフォルダを自動で作成するPythonプログラムを作ってみましょう。
こちらです。
import os,csv
with open('area.csv') as f:
reader = csv.reader(f)
for row in reader:
area = row[0] + '_' + row[1]
if os.path.exists(area):
print('フォルダ ' + area + ' は既に存在しています')
else:
os.mkdir(area)
まとめ
以上、Pythonでcsvファイルからデータを読み込む最初の一歩についてお伝えしました。
Readerオブジェクトというやつがいきなり登場するので、少し構えてしまうかも知れませんが、csvデータをいい感じに保持してくれる素敵なオブジェクトくらいに思っていただければOKと思います。
次回ですが、さすがにフォルダ作成は食らいつくした感じですので、別のツールを作ってみたいと思います。
その準備として、以下パッケージ管理ツールpipについての記事をどうぞ。
どうぞお楽しみに!
連載目次:【初心者向けPython】基本の基本を学びながらフォルダ操作
非エンジニアの一般ビジネスマンの初心者向けにPythonでWindowsのファイルやフォルダを操作する簡単便利ツールの作り方を解説しながら、Pythonプログラミングの基本中の基本を学んでいくシリーズです。- Pythonで標準ライブラリのモジュールをインポートして使ってみよう
- Pythonでosモジュールのmkdir関数を使ってフォルダを作成する超簡単なプログラム
- Pythonプログラミングの基本中の基本!forループによる繰り返しの作り方
- Pythonでデータをまとめて取り扱う基本中の基本!リストの使い方とforループ
- Pythonで指定したフォルダが存在しているかどうかを調べるos.path.existsの使い方
- Pythonで条件分岐をする基本中の基本!if~else文の作り方
- Pythonでテキストファイルを開いてデータを読み込む基本中の基本
- Pythonで文字列を区切り文字や改行で分割してリスト化するsplitメソッドの使い方
- Pythonで文字列のスペース・タブ・改行を取り除くstripメソッドの使い方
- Pythonで開いたファイルのクローズを忘れやすい人のためのwith文の使い方
- Pythonでcsvファイルからデータを読み込む最初の一歩