LoginSignup
1
0

More than 3 years have passed since last update.

100日後にエンジニアになるキミ - 69日目 - プログラミング - ファイル操作について

Posted at

昨日までのはこちら

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行ずつ行います。
下記がテキストファイルの読み込みの例です。

with open(ファイルパス) as ファイル変数:
    処理

with openの構文で読み込みを行います。
openではファイルパスを指定することでファイルの読み込みができます。

読み込んだ後の操作をするためにファイル変数として格納し処理を行う際に使います。

プログラムと同じ場所に置いたテキストファイルを読み込みする例です。

with open('higedan_list.txt') as _r:
    for row in _r:
        print(row)

溶ける 絵の具 みたい イレギュラー 独り 何 ひとつ ...

for文を用いると1行ずつ文字列として処理が行えます。

上手くやれば、普通のテキストエディターでは開くことができない
長大なサイズのファイルの中も見ることができます。

CSVファイル(.csv)

CSV(Comma-Separated Values)
,カンマで区切られた形式のファイル形式です。
縦、横で数が揃うような表形式のファイルになっています。

1行目は通常はヘッダー行として扱われ表頭としてのデータが書き込まれていることが多いです。
その場合、データ行は2行目以降になります。

注意点として,カンマをデータに含む場合は"で囲まれている場合があります。
,は通常、区切りの文字として扱われるため、データとしての,
囲み文字で囲んでおかないとデータの列数などがずれてしまうことになります。

データを書き込む際や、読み込みをする際には気をつけましょう。

Python言語ではcsvライブラリでCSVファイルの読み込みができます。
通常は,区切りですが、区切り文字を引数delimiterで指定ができます。
TAB区切りのファイルなども読み込みすることができます。

import csv

with open(csvファイル名) as ファイル変数:
    csv変数 = csv.reader(ファイル変数)
    処理

with open(csvファイル名) as ファイル変数:
    csv変数 = csv.reader(ファイル変数 , delimiter='区切り文字')
    処理

データフレームとして読み込みをしたい場合はpandasライブラリを用います。

import pandas as pd

データフレーム変数名 = pd.read_csv(ファイルパス)

読み込んでみると次のようになります。

import pandas as pd

df = 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ファイルとして読み込みをする必要があります。

import json

with open(jsonファイル名) as ファイル変数:
    変数 = json.load(ファイル変数)

読み込みするとこうなります。

import json

with open('json.json') as _r:
    js = json.load(_r)
print(js)

{'1': [1, 2, 3], '2': [3, 5, 6]}

ZIPファイル(.zip)

ZIPファイルは圧縮形式のファイルで複数個のファイルを1つにまとめたファイルです。
そのためZIPの中身のファイルが何かを知りたい場合は以下のようなコードになります。

import zipfile

with zipfile.ZipFile(zipファイルパス) as zipファイル変数:
    for 変数 in zipファイル変数.namelist():
        print(変数.encode('文字コード'))

ZIPではパスワード設定などもできるので展開方法は下記の通りです。

import zipfile

#zipの全展開
with zipfile.ZipFile(zipファイルパス) as zipファイル変数:
    zipファイル変数.extractall(出力先ディレクトリ)

#zipのパスワード入力展開
with zipfile.ZipFile(zipファイルパス) as zipファイル変数:
    zipファイル変数.extractall(出力先ディレクトリ,pwd='パスワード')

#zipのファイル指定展開
with zipfile.ZipFile(zipファイルパス) as zipファイル変数:
    zipファイル変数.extract('ファイル名',出力先ディレクトリ)

GZIP(.gz)

ZIPと似ていますが1つのファイルを圧縮したファイル形式です。
そのため中身は1つしかありません。

ファイルを展開しながら中身を見るのは以下のようなコードです。

import gzip

with gzip.open(GZIPファイルパス,'r') as gzipファイル変数:
    処理:

圧縮されているので、for文内で展開されるのは文字列ではなくバイトコードになったりするので気をつけましょう。

画像ファイル(.jpg , .png , .gif)

画像ファイルの読み込みはPILライブラリで行うことができます。

from PIL import Image, 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ライブラリの場合はシートをそのままデータフレームとして読み込みします。

import pandas as pd

データフレーム変数名 = pd.read_excel(ファイルパス, sheet_name='シート名')

読み込んでみると次のようになります。

import pandas as pd

df = 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

ファイルの書き込み

テキスト形式のファイルであれば読み込みと同じような手順で書き込みができます。

with open(ファイルパス,'w') as ファイル変数:
    処理

読み込みとの違いはopenの引数に'w'が追加されることです。
'w'は上書き、'a'は追記で書き込みを行います。

画像の場合はPILライブラリなどで書き込みすることができます。

from PIL import Image

Image変数.save(ファイルパス)

まとめ

よく使うファイル形式のものだけですが、業務ではファイルの読み込み作業はかなり多いので
色々覚えておくと楽です。

他にも様々なデータ形式があり、都度読み込み方法が変わるので
自分が使うファイル形式のやり方を調べてみましょう。

君がエンジニアになるまであと31日

作者の情報

乙pyのHP:
http://www.otupy.net/

Youtube:
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter:
https://twitter.com/otupython

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0