昨日までのはこちら
100日後にエンジニアになるキミ - 66日目 - プログラミング - 自然言語処理について
100日後にエンジニアになるキミ - 63日目 - プログラミング - 確率について1
100日後にエンジニアになるキミ - 59日目 - プログラミング - アルゴリズムについて
100日後にエンジニアになるキミ - 53日目 - Git - Gitについて
100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて
100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて
100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1
100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1
100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1
100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1
今回はファイルの読み込みについてで、言語はPython言語を用います。
ファイルの読み込み
Pythonでファイルの読み込みをする方法はたくさんあります。
まずはデータファイルがどんな形式なのかによって方法が変わってきます。
テキストファイル(.txt)
拡張子が.txt
のものはテキストファイルです。
単純に文章を保存したものはテキストファイルで、文章の長さなどの決まりはなく
改行を入れると複数行をファイルにまとめることができます。
テキストファイルの読み込みは1行ずつ行います。
下記がテキストファイルの読み込みの例です。
withopen(ファイルパス)asファイル変数:処理
with open
の構文で読み込みを行います。open
ではファイルパス
を指定することでファイルの読み込みができます。
読み込んだ後の操作をするためにファイル変数として格納し処理を行う際に使います。
プログラムと同じ場所に置いたテキストファイルを読み込みする例です。
withopen('higedan_list.txt')as_r:forrowin_r:print(row)
溶ける 絵の具 みたい イレギュラー 独り 何 ひとつ ...
for文を用いると1行ずつ文字列として処理が行えます。
上手くやれば、普通のテキストエディターでは開くことができない
長大なサイズのファイルの中も見ることができます。
CSVファイル(.csv)
CSV(Comma-Separated Values)
,
カンマで区切られた形式のファイル形式です。
縦、横で数が揃うような表形式のファイルになっています。
1行目は通常はヘッダー行として扱われ表頭としてのデータが書き込まれていることが多いです。
その場合、データ行は2行目以降になります。
注意点として,
カンマをデータに含む場合は"
で囲まれている場合があります。,
は通常、区切りの文字として扱われるため、データとしての,
は
囲み文字で囲んでおかないとデータの列数などがずれてしまうことになります。
データを書き込む際や、読み込みをする際には気をつけましょう。
Python言語ではcsv
ライブラリでCSVファイルの読み込みができます。
通常は,
区切りですが、区切り文字を引数delimiter
で指定ができます。TAB
区切りのファイルなども読み込みすることができます。
importcsvwithopen(csvファイル名)asファイル変数:csv変数=csv.reader(ファイル変数)処理withopen(csvファイル名)asファイル変数:csv変数=csv.reader(ファイル変数,delimiter='区切り文字')処理
データフレームとして読み込みをしたい場合はpandas
ライブラリを用います。
importpandasaspdデータフレーム変数名=pd.read_csv(ファイルパス)
読み込んでみると次のようになります。
importpandasaspddf=pd.read_csv('tabelog_star_data.csv')df.head()
夜価格低 | 昼価格低 | 星 | コメント数 | ブックマーク数 | |
---|---|---|---|---|---|
0 | 5000 | 1000 | 3.15 | 63 | 4763 |
1 | 2000 | 1000 | 3.37 | 15 | 1202 |
2 | 10000 | 3000 | 3.64 | 85 | 3340 |
3 | 3000 | 999 | 3.29 | 51 | 2568 |
4 | 5000 | 999 | 3.36 | 21 | 1522 |
JSONファイル(.json)
json
は辞書形式の文字列で書かれたファイルです。
テキストファイルとして読み込みすることもできますが、単純な文字列ではなく
辞書形式で読み込みするのであればjson
ファイルとして読み込みをする必要があります。
importjsonwithopen(jsonファイル名)asファイル変数:変数=json.load(ファイル変数)
読み込みするとこうなります。
importjsonwithopen('json.json')as_r:js=json.load(_r)print(js)
{'1': [1, 2, 3], '2': [3, 5, 6]}
ZIPファイル(.zip)
ZIP
ファイルは圧縮形式のファイルで複数個のファイルを1つにまとめたファイルです。
そのためZIP
の中身のファイルが何かを知りたい場合は以下のようなコードになります。
importzipfilewithzipfile.ZipFile(zipファイルパス)aszipファイル変数:for変数inzipファイル変数.namelist():print(変数.encode('文字コード'))
ZIP
ではパスワード設定などもできるので展開方法は下記の通りです。
importzipfile#zipの全展開
withzipfile.ZipFile(zipファイルパス)aszipファイル変数:zipファイル変数.extractall(出力先ディレクトリ)#zipのパスワード入力展開
withzipfile.ZipFile(zipファイルパス)aszipファイル変数:zipファイル変数.extractall(出力先ディレクトリ,pwd='パスワード')#zipのファイル指定展開
withzipfile.ZipFile(zipファイルパス)aszipファイル変数:zipファイル変数.extract('ファイル名',出力先ディレクトリ)
GZIP(.gz)
ZIP
と似ていますが1つのファイルを圧縮したファイル形式です。
そのため中身は1つしかありません。
ファイルを展開しながら中身を見るのは以下のようなコードです。
importgzipwithgzip.open(GZIPファイルパス,'r')asgzipファイル変数:処理:
圧縮されているので、for文内で展開されるのは文字列ではなくバイトコードになったりするので気をつけましょう。
画像ファイル(.jpg , .png , .gif)
画像ファイルの読み込みはPIL
ライブラリで行うことができます。
fromPILimportImage,ImageFilter,ImageOps#画像を読み込みする
im=Image.open(ファイルパス)#画像のサイズ
print(im.size)#画像のフォーマット
print(im.format)#画像のRGB最大最小値
print(im.getextrema())#画像のメタ情報
print(im.mode)
(432, 288)
PNG
((0, 255), (0, 255), (0, 255), (255, 255))
RGBA
エクセルファイル(.xlsx)
エクセル
ファイルの読み込みはpandas
ライブラリなどで行うことができます。pandas
ライブラリの場合はシートをそのままデータフレームとして読み込みします。
importpandasaspdデータフレーム変数名=pd.read_excel(ファイルパス,sheet_name='シート名')
読み込んでみると次のようになります。
importpandasaspddf=pd.read_excel('tabelog_star_data.xlsx',sheet_name='シート01')df.head()
夜価格低 | 昼価格低 | 星 | コメント数 | ブックマーク数 | |
---|---|---|---|---|---|
0 | 5000 | 1000 | 3.15 | 63 | 4763 |
1 | 2000 | 1000 | 3.37 | 15 | 1202 |
2 | 10000 | 3000 | 3.64 | 85 | 3340 |
3 | 3000 | 999 | 3.29 | 51 | 2568 |
4 | 5000 | 999 | 3.36 | 21 | 1522 |
ファイルの書き込み
テキスト形式のファイルであれば読み込みと同じような手順で書き込みができます。
withopen(ファイルパス,'w')asファイル変数:処理
読み込みとの違いはopen
の引数に'w'
が追加されることです。'w'
は上書き、'a'
は追記で書き込みを行います。
画像の場合はPIL
ライブラリなどで書き込みすることができます。
fromPILimportImageImage変数.save(ファイルパス)
まとめ
よく使うファイル形式のものだけですが、業務ではファイルの読み込み作業はかなり多いので
色々覚えておくと楽です。
他にも様々なデータ形式があり、都度読み込み方法が変わるので
自分が使うファイル形式のやり方を調べてみましょう。
君がエンジニアになるまであと31日
作者の情報
乙pyのHP:
http://www.otupy.net/
Youtube:
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw
Twitter:
https://twitter.com/otupython