🤮

[Python] ダミーファイル生成

2021/07/08に公開

概要

クリップボードにあるファイル名のファイルを生成します。
対応している拡張子はWord(*.docx)、Excel(*.xlsx)、JPEG(*.jpg, *.jpeg)、PDF(*.pdf)、テキスト(*.txt)。
ファイルの中にファイル名を書き込みます。

環境

  • Windows 10 Version 21H1
  • Visual Studio Code 1.57.1
  • Python 3.9.5
  • パッケージ
    • openpyxl 3.0.7
    • Pillow 8.3.1
    • pyperclip 1.8.2
    • python-docx 0.8.11
    • reportlab 3.5.68

スクリプト

出力先はOUT_FOLDERで指定したフォルダです。
フォルダがなければ自動で作成します。
対応していない拡張子はテキスト形式で出力します。

create_files.py
import os
import sys
from typing import Final

import docx
import pyperclip
from openpyxl import Workbook
from PIL import Image, ImageDraw, ImageFont
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.pdfgen import canvas

# 出力フォルダ名
OUT_FOLDER: Final[str] = "out"


def xlsx_creator(file_name: str, file_path: str) -> None:
    """Excelファイル生成"""
    wb = Workbook()
    sheet = wb.active
    sheet["B2"].value = file_name
    wb.save(file_path)


def docx_creator(file_name: str, file_path: str) -> None:
    """Wordファイル生成"""
    doc = docx.Document()
    doc.add_heading("ファイル名", 1)
    doc.add_paragraph(file_name)
    # 出力フォルダに保存
    doc.save(file_path)


def jpg_creator(file_name: str, file_path: str) -> None:
    """jpeg画像生成"""
    img = Image.new('RGB', (800, 30), (0x66, 0xcd, 0xaa))
    draw = ImageDraw.Draw(img)
    font = ImageFont.truetype('C:/Windows/Fonts/msgothic.ttc', 20)
    draw.multiline_text((0, 0), file_name, fill=(0, 0, 0), font=font)
    img.save(file_path, quality=70)


def pdf_creator(file_name: str, file_path: str) -> None:
    """PDF作成"""
    pdfmetrics.registerFont(UnicodeCIDFont('HeiseiMin-W3'))
    c = canvas.Canvas(file_path, bottomup=False)
    c.setFont('HeiseiMin-W3', 20)
    c.drawString(30, 30, file_name)
    c.showPage()
    c.save()


def txt_creator(file_name: str, file_path: str) -> None:
    """テキストファイル生成"""
    with open(file_path, 'w', encoding='UTF-8') as f:
        f.write(f'● {file_name} ●')


# 拡張子ごとのファイル生成関数
ext_tbl: dict = {
    '.xlsx': xlsx_creator,
    '.docx': docx_creator,
    '.jpg': jpg_creator,
    '.jpeg': jpg_creator,
    '.pdf': pdf_creator,
    '.txt': txt_creator,
}

# 出力フォルダがなければ作成
os.makedirs(OUT_FOLDER, exist_ok=True)

# クリップボードからファイル名一覧取得
raw_list = pyperclip.paste()
if raw_list is None:
    print('クリップボードにファイル名一覧がありません。')
    sys.exit()
file_list = raw_list.split('\r\n')

for item in file_list:
    file_name: str = item.rstrip('\r\n')
    if file_name == '':
        continue
    file_path: str = os.path.join(OUT_FOLDER, file_name)
    _, ext = os.path.splitext(file_name)
    # 拡張子に対応する関数を取得(用意していない拡張子はテキストとして処理)
    func = ext_tbl.get(ext.lower(), txt_creator)
    # ファイル生成
    func(file_name, file_path)
    print(file_path)

実行例

以下をクリップボードにコピーします。

文書1.docx
〇×△表-A.xlsx
メモ.txt
あいうえお.hoge
風景01.jpg
風景02.jpeg
マニュアルa01.PDF

スクリプト実行

出力フォルダにファイルが作成されました。

Word

jpeg画像

PDF

Discussion