本記事の対象の方
- python初心者の方
- for文の使い方は勉強したが実際の使い方がわからない方
for文とは?
for文とは繰り返し処理をするものですが、一言でどんな処理かと言うと
リストから要素を1つずつ取り出して処理をする構文
です。
従いまして、for文を理解するにはリストも理解する必要があります。
では、リストとは何でしょうか?リストを一言でいうと
変数(数字、文字、配列 etc)が複数入った箱です
ですので、先ほどのfor文を言い換えると
変数が入った箱=リストから1つずつ取り出して処理をする構文
ということになります。
従いまして、実際のコードの書き方としては以下のようになります。
for i in リスト:
iに対する処理
それを踏まえてイラストで表すと以下のようになります。
このイラストをコードにするとこのようになります。
my_list = [a, b, c]
for i in my_list:
iに対する処理
for文の実用例
よくfor文の解説で見るrange関数を使った
for i in range(0, 10):
x = i * 2
print(x)
のようなコードは正直あまり使いどころはありません。
ですので、実用的な使い方を説明したいと思います。
実用で使う時には
- リストを作る
- for文で繰り返し処理
という順番で処理を考えていくことになります
実用的な例ですのでfor文以外のコードの書き方も必要となってきますので
それは適宜解説をしたいと思います。
今回の紹介する例は
フォルダ内のデータを1つずつ読み込んで処理する
です。
これは頻繁に使いますので、覚えておいて損はないと思います。
今回の実用例のために以下のようなファイルとサンプルコードを用意しました。
jupyter notebook形式になっています。
適当に私が作りましたcsvファイルとなっています。
このようにcsvファイルが複数あって、それを1つずつ処理するケースは多々あります。
以下がサンプルコードの全体像です。
#標準ライブラリの読み込み
import os
import csv
#フォルダの名前の定義
data_path = "testdata"
#フォルダ内のファイル名のリストを作成
data_list = os.listdir(data_path)
#ファイル名を1つずつ取り出して処理
for d in data_list:
#ファイル名を表示
print(d)
#ファイル名とフォルダ名を結合
d_path = os.path.join(data_folder, d)
#csvファイルを読み込み中身を表示
f = open(d_path)
print(f.read())
出力は以下のようになります。
csvのファイル名と中身を表示するプログラムとなっています。
実際には表示だけでなく何かしらの処理をすることになります。
data1.csv
a,b,c
data2.csv
d,e,f
data3.csv
g,h,i
では、解説していきたいと思います。
#標準ライブラリの読み込み
import os
import csv
この部分は標準ライブラリの読み込みです。
os・・・フォルダ・ファイルの操作のライブラリ
csv・・・csvの読み込み・書き込み等のライブラリ
よく使いますので覚えておいて損はないです。
#フォルダの名前の定義
data_path = "testdata"
次の処理はフォルダ名の定義です。
jupyter notebookのファイルと同じ階層にcsvのフォルダがありますので、今回はフォルダ名だけの定義でOKです。
※わからない方は「python 絶対パス 相対パス」で検索してみてください
#フォルダ内のファイル名のリストを作成
data_list = os.listdir(data_path)
先ほどのファイルパスとosの中の「listdir」という関数を使うことでファイル名のリストを所得することができます。
['data1.csv', 'data2.csv', 'data3.csv']
出力はこのようになります。このリストを使ってfor文を作ることになります。
#ファイル名を1つずつ取り出して処理
for d in data_list:
次は実際にfor文で1つずつ取り出して処理をします。
先ほどのイラストで表すと以下のようになります。
上記のイラストの「d」という変数に対して
- print関数で表示
- フォルダ名とファイル名を結合
- csvの読み込みと中身の表示
を行います。
#ファイル名を1つずつ取り出して処理
for d in data_list:
#ファイル名を表示
print(d)
#ファイル名とフォルダ名を結合
d_path = os.path.join(data_folder, d)
#csvファイルを読み込み中身を表示
f = open(d_path)
print(f.read())
必要な部分だけ解説します。
#ファイル名とフォルダ名を結合
d_path = os.path.join(data_folder, d)
この部分はファイルは実際には「testdata」というフォルダに入っていますので、ファイル名だけでは読み込みはできません。
したがいまして、フォルダ名とファイル名を使って読み込むcsvのパスを作るという処理が必要になってきます。
イメージは以下のようになります。
csvの読み込み処理については実践編で解説しようと思います。
最後に
いかがだったでしょうか。
実際にfor文を使って実用的な処理をしようとすると色々な知識が必要になってきます。
このブログでも少しずつ解説する記事を上げていきますので、興味ある方は他の記事も見ていただけると幸いです。
コメント