今回はPythonで様々なファイルを
取り扱う方法についてです


解説動画はこちら



今回はPython言語で色々なファイルを取り扱う方法のまとめ
様々な形式のファイルの確認、再生、編集方法について

今回取り扱うファイル形式は
以下の通りです

テキストファイル
 txt , json , csv

エクセルファイル
 xlsx

画像ファイル
 png , jpeg

動画ファイル
 mp4 , mov

音声ファイル
 mp3 , WAV , AIFF


全体的にファイル名やファイルパスなどは
書き換えて行って下さい


1.テキストファイル
拡張子:.txt
プレーンテキストのことで
文字コードによって表される
データだけが含まれるファイル形式です

with openの構文で
ファイルを開けます

一気にファイルを開く方法
# テキストファイルを開く
with open('file/sample_text.txt') as _f:
    text = _f.read()
    
print(text)

ただし、上記の方法だと
サイズの大きいファイルを開くと
固まってしまう可能性があります

そんな場合は1行づつ読み込みします


ファイルを1行づつ開く方法
# テキストファイルを開く
with open('file/sample_text.txt') as _f:
    for i,row in enumerate(_f):
        # 特定行数でブレイクする
        if i>0:
            break
        print(row)

この場合は任意の行数でプレビューする事で
大きなサイズのファイルも開けます


テキストファイルの書き込み

with open構文に引数 w を追加すれば
書き込みを行えます

# テキストファイルを書き込みする
with open('file/out.txt','w') as _w:
    _w.write('さんぷる\n')
    _w.write('テキスト')
    _w.write('書いてみよう\n')



2.Json形式
拡張子 : .json
辞書形式のテキストファイルで
文字列のキーと値のペアをコロンで対
コンマ区切り、全体を波カッコ { } で括る
ファイル形式です


Jsonファイルを開く方法

jsonライブラリで
json.loadを使います
import json

with open('file/sample_json.json') as _f:
    json_data = json.load(_f)

print(json_data)
print(type(json_data))
print(len(json_data))

読み込み後のデータは
辞書型になっています


Jsonファイルをの書き込み

辞書型のデータを
json.dumpでjsonファイルに書き込みできます
sample_dict = {"A":1,"B":2,"C":{"D":444,"E":666}}

with open('file/out.json' , 'w') as _w:
    json.dump(sample_dict , _w , ensure_ascii=False)



3.CSVファイル
拡張子 : .csv
「 , 」カンマ区切りのテキストファイル

テキストファイル同様
with構文で読み書きが行えます

読み込んだあとに
カンマで区切ればデータ化できます
# CSVファイルを開く
with open('file/sample_csv.csv') as _f:
    for i,row in enumerate(_f):
        rows = row.replace('\n','').split(',')
        print(rows)


CSVライブラリを用いると いい感じでカンマ区切りを行ってくれます
# CSVライブラリを使用する場合
import csv

with open('file/sample_csv.csv') as _f:
    reader = csv.reader(_f)
    for row in reader:
        print(row)

CSVファイルの書き込みは
テキストファイル同様にし
拡張子を「.csv」にして
カンマ区切りのテキストにすれば
良いです



Pandasライブラリで開く場合

開いた場合のデータ形式は
「データフレーム」となります
import pandas as pd

df = pd.read_csv('file/sample_csv.csv')

df


PandasライブラリでCSVファイルの書き込み
df.to_csv('file/out.csv' , index=False)



4.エクセルファイル

拡張子 : .xlsx
MicrosoftのExcel形式


Pandasライブラリで開く場合

開いた場合のデータ形式は「データフレーム」となります
綺麗な表形式になっていないとうまく開けないので
注意が必要です


import pandas as pd

df = pd.read_excel('file/pop_area_2009.xlsx')

df


openpyxl を用いる方法

エクセル操作用のライブラリで
閲覧・編集・保存など様々な操作を行えます
要インストール(openpyxl)


openpyxlでエクセルファイルの読み込み
import openpyxl

wb = openpyxl.load_workbook('file/pop_area_2009.xlsx')

# ワークブック内のアクティブなシートを取得
ws = wb.active

# セルA1を表示
print(ws["A1"].value) 

openpyxlで行列を指定して閲覧
for r in range(1,5):
    for c in range(1,5):
        val = ws.cell(row=r, column=c).value
        print(val , end='\t')
    print()




5.画像ファイル
拡張子 : .png .jpegなど
静止画などの画像形式

PILでイメージの読み込み
Matplotlibで表示

import matplotlib.pyplot as plt
from PIL import Image
%matplotlib inline

# 画像の読み込み
im = Image.open("file/kosakana.png")

# 表示サイズの指定
plt.figure(figsize=(10, 12))
# 画像の表示
plt.imshow(im)
# 軸の表示の削除
plt.axis('off')
plt.show()



opencvで画像の読み込み

要インストール(opencv)
そのまま読み込みすると
色の順番がBGR(青、緑、赤)になってしまうので
RGBに変換が必要です
import matplotlib.pyplot as plt
import cv2
%matplotlib inline

# 画像の読み込み
im_cv = cv2.imread("file/kosakana.png")

# 画像のBGRをRGBに変換する
im_rgb = cv2.cvtColor(im_cv, cv2.COLOR_BGR2RGB)

# 表示サイズの指定
plt.figure(figsize=(10, 12))
# 画像の表示
plt.imshow(im_rgb)
# 軸の表示の削除
plt.axis('off')
plt.show()


モザイク処理なんかも
行う事ができます
# 画像の読み込み
im_cv = cv2.imread("file/kosakana.png")
# 画像のBGRをRGBに変換する
im_rgb = cv2.cvtColor(im_cv, cv2.COLOR_BGR2RGB)

# モザイク処理を行う
ratio = 0.06
tmp_img = cv2.resize(im_rgb, None, fx=ratio, fy=ratio, interpolation=cv2.INTER_NEAREST)
dst = cv2.resize(tmp_img, im_rgb.shape[:2][::-1], interpolation=cv2.INTER_NEAREST)

# 表示サイズの指定
plt.figure(figsize=(10, 12))
# 画像の表示
plt.imshow(dst)
# 軸の表示の削除
plt.axis('off')
plt.show()



6.動画ファイル
拡張子 : .mp4 .mov
静止画の集まり + 音声になっているので
opencvで開けます


opencvでのファイルの読み込み

import cv2

cap = cv2.VideoCapture('file/kosakana.mp4')

# データ型
print(type(cap))

# 動画のサイズ
print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# フレームレート
print(cap.get(cv2.CAP_PROP_FPS))

# フレーム数
print(cap.get(cv2.CAP_PROP_FRAME_COUNT))

# 秒数
print(cap.get(cv2.CAP_PROP_FRAME_COUNT) / cap.get(cv2.CAP_PROP_FPS))


Jupyter Notebookで動画ファイルの再生

単純なプレビューなら
Jupyter Notebookで行う事ができます
from IPython.display import Video

Video('file/result_voice.mp4',width=600)




7.音声ファイル

拡張子 : .mp3 .wav .aiff

Jupyter Notebookで音声ファイルの再生
from IPython.display import Audio

Audio('file/kosakana.wav')



Librosaライブラリを用いる方法

Pythonの音声解析用のライブラリで
様々な解析を行う事ができます
要インストール(librosa)

下記はバージョン0.9.2のコードです
バージョンによりメソッドが
かなり異なるので注意が必要です

Librosaで音声ファイルの読み込み

import librosa
import librosa.display
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.simplefilter('ignore')
%matplotlib inline

print(librosa.__version__)

file_path = 'file/kosakana.wav'

# 音声をnumpyのndarrayに読み込みする
y, sr = librosa.load(file_path , sr=None, mono=False)


print(y.shape)
print(type(y))

# サンプリング周波数
print(sr)


Librosaで音声波形の表示
plt.figure(figsize=(12,6))
librosa.display.waveshow(y, sr)
plt.show()


Librosaでスペクトログラムの表示

音声を周波数分析して色による強さ
周波数、時間の3次元表示
y, sr = librosa.load(librosa.ex('choice'), duration=15)
fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True ,figsize=(12, 10))
D = librosa.amplitude_to_db(np.abs(librosa.stft(y)), ref=np.max)
img = librosa.display.specshow(D, y_axis='linear', x_axis='time',sr=sr, ax=ax[0])



こんな感じで、Python言語では
様々な形式のファイルを扱う事ができます

上記で世の中にある
ほとんどのファイル操作が行えると思いますので
ファイルを取り扱って自動化したい場合は
参考にしてみて下さい

それでは