Python 実践 データ加工/可視化 100本ノック に挑戦 ノック96 ノック97

ノック96 : 動画ファイルを画像ファイルへ分割してみよう

動画ファイルを複数の画像ファイルに変換します。

capというオブジェクトを作成します。(VideCaptureクラス)

os.makedirsで画像ファイルを保存するフォルダimage_by_pyを作成します。

exist_ok=1は既存フォルダがあってもエラーを返さないように設定しています。

exist_ok=0 やexist_ok=Falseとすると以下のようなエラーが表示されます。

「FileExistsError: [WinError 183] 既に存在するファイルを作成することはできません。: 'data/image_by_py'」

 

cv2.CAP_PROP_FRAME_COUNTでフレーム数をカウントします。

 

for文でフレーム数分回してpngファイルを作成、保存しています。

ファイル名は変数iiiの値で4桁表示になります。

import cv2
from tqdm import trange
import os

cap = cv2.VideoCapture('data/sample_video.mp4')
img_dir = ('data/image_by_py')
os.makedirs(img_dir,exist_ok=1)
n = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

for iii in trange(n):
    success,img = cap.read()
    if not success:
        continue
    cv2.imwrite(f'{img_dir}/{iii:04}.png',img)

 

ノック97 : PowerPointやWordファイルを読み込んでみよう

PowerPoint、Wordファイルを読み込みます。

PowerPointファイル、Wordファイルを読み込むにはそれぞれ以下のモジュールをインストールする必要があります。

pip install python-pptx

pip install python-docx

 

サンプルのPowerPointを読み込みます。

import pptx
pptx_data = pptx.Presentation('data/サンプル_PowerPoint.pptx')

print(len(pptx_data.slides))

 

スライドが何枚あるのかを表示します。

 

実行結果

2

 

2枚あることがわかります。実際のPowerPointの中身は以下の通りです。

 

powerpoint

 

PowerPoint

 

 

PowerPointの1枚目の情報を取得します。

sld_0 = pptx_data.slides[0]
shp_sld_0 = sld_0.shapes
print(len(shp_sld_0))

 

実行結果

3

 

1枚目のスライドには3つのシェイプ(テキストや画像)が存在することがわかります。

テキスト情報を取得し、表示します。

2行目はシェイプがテキストかどうかを判定する記述でテキストであればTrueを返します。

print(shp_sld_0[0].text)
print(shp_sld_0[0].has_text_frame)

 

実行結果

サンプルテキスト Font 18
True

 

全ページのテキストを表示します。

texts =
for slide in pptx_data.slides:
    for shape in slide.shapes:
        if shape.has_text_frame:
            texts.append(shape.text)
print(texts)

 

実行結果

['サンプルテキスト Font 18', 'サンプルテキスト\nFont 28', 'サンプル', '2枚目サンプルテキスト Font 18', '2枚目サンプルテキスト\nFont 28', '', '']

 

 

次にサンプルのワードファイルを読み込みます。

サンプルのWordファイルは1ページ3段落の構成になっています。

段落数を取得し表示します。

import docx
docx_data = docx.Document('data/サンプル_Word.docx')
print(len(docx_data.paragraphs))

 

実行結果

3

 

Wordファイルの内容を読み込んで表示します。

texts_doc=
for paragraph in docx_data.paragraphs:
    texts_doc.append(paragraph.text)

print(texts_doc)

 

実行結果

['これは、サンプルテキストです。そして、これが一つめの段落になっています。いろいろ読み込んでいきましょう。', '続いて、これが二つ目の段落になっています。', 'これが三つめの段落です。']

 

 

 

 

 

 

 

 

 

/* -----codeの行番号----- */