【Python】ページのリンク切れをチェックする

機能

ページのリンク切れをチェックするPythonコードです。

コード

#! Python3
# 機能
#  ページのリンク切れをチェックする
# 使い方
#  1.Pythonを実行する
# 実行コマンド
#  python link_checker.py URL

import re
import sys
import bs4
import requests
from urllib.parse import urljoin

def check_link(url):
    res = requests.get(url)
    res.raise_for_status()

    soup = bs4.BeautifulSoup(res.text, 'lxml')
    links = soup.select('a')

    href_set = set()
    for link in links:
        href = link.get('href')
        if not href:
            continue

        if not href.startswith('http'):
            href = urljoin(url, href)

        href = re.sub(r'(#.+)', '', href)
    
        if href in href_set:
            continue

        href_set.add(href)
        print(href, end='', flush=True)

        try:
            res = requests.get(href)
            if res.status_code == 200:
                print(' -> OK')
            else:
                print(' -> NG ' + str(res.status_code))
        except:
            print(' -> Error')

if len(sys.argv) != 2:
    sys.exit('使い方:python link_checker.py URL')

check_link(sys.argv[1])

使い方

  1. Pythonを実行する

実行コマンド

python link_checker.py URL

実行例

youtu.be

参考文献

www.oreilly.co.jp

【Python】Excel上の価格を更新する

機能

Excel上の価格を更新するPythonコードです。

コード

#! python3
# 機能
#  Excel上の価格を更新する
# 使い方
#  1.Pythonを実行する
# 実行コマンド
#  python price_updater.py 入力ファイル 出力ファイル 更新ファイル
#  python price_updater.py input.xlsx output.xlsx update.json

import sys
import json
import openpyxl

def update_price(src_path, dst_path, update_path):
    with open(update_path, 'r', encoding='utf-8') as update_file:
        update_list = json.load(update_file)

    wb = openpyxl.load_workbook(src_path)
    for sheet in wb.worksheets:
        for row in range(2, sheet.max_row + 1):
            item = sheet.cell(row=row, column=2).value
            if item in update_list:
                sheet.cell(row=row, column=4).value = update_list[item]
    wb.save(dst_path)

if len(sys.argv) != 4:
    sys.exit('使い方:python price_updater.py 入力ファイル 出力ファイル 更新ファイル')

update_price(sys.argv[1], sys.argv[2], sys.argv[3])

使い方

  1. Pythonを実行する

実行コマンド

python price_updater.py 入力ファイル 出力ファイル 更新ファイル
python price_updater.py input.xlsx output.xlsx update.json

実行例

youtu.be

参考文献

www.oreilly.co.jp

【Python】Excelの行と列を入れ替える

機能

Excelの行と列を入れ替えるPythonコードです。

コード

#! python3
# 機能
#  Excelの行と列を入れ替える
# 使い方
#  1.Pythonを実行する
# 実行コマンド
#  python matrix_swaper.py 入力ファイル 出力ファイル
#  python matrix_swaper.py input.xlsx output.xlsx

import sys
import openpyxl
from copy import copy

def swap_matrix(src_sheet, dst_sheet):
    for row in range(1, src_sheet.max_row + 1):
        for col in range(1, src_sheet.max_column + 1):
            src_cell = src_sheet.cell(column=col, row=row)
            dst_cell = dst_sheet.cell(column=row, row=col)
            dst_cell.value = src_cell.value
            if src_cell.has_style:
                dst_cell.font = copy(src_cell.font)
                dst_cell.border = copy(src_cell.border)
                dst_cell.fill = copy(src_cell.fill)
                dst_cell.number_format = copy(src_cell.number_format)
                dst_cell.protection = copy(src_cell.protection)
                dst_cell.alignment = copy(src_cell.alignment)

def walk_sheet(src_path, dst_path):
    src_wb = openpyxl.load_workbook(src_path)
    dst_wb = openpyxl.Workbook()
    dst_wb.remove(dst_wb.active)

    for src_sheet in src_wb.worksheets:
        dst_sheet = dst_wb.create_sheet()
        dst_sheet.title = src_sheet.title
        swap_matrix(src_sheet, dst_sheet)

    dst_wb.save(dst_path)

if len(sys.argv) != 3:
    sys.exit('使い方:python matrix_swaper.py 入力ファイル 出力ファイル')

walk_sheet(sys.argv[1], sys.argv[2])

使い方

  1. Pythonを実行する

実行コマンド

python matrix_swaper.py 入力ファイル 出力ファイル
python matrix_swaper.py input.xlsx output.xlsx

実行例

youtu.be

参考文献

www.oreilly.co.jp

qiita.com

www.py4u.net

【Python】招待リストから招待状を生成する

機能

招待リストから招待状を生成するPythonコードです。

コード

#! python3
# 機能
#  招待リストから招待状を生成する
# 使い方
#  1.招待リストを配置する
#  2.Pythonを実行する
# 実行コマンド
#  python invitation_maker.py

import docx
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

with open('guests.txt', 'r', encoding='utf-8') as guest_file:
    doc = docx.Document()

    for guest in guest_file:
        guest = guest.strip()
        if guest == '':
            continue

        doc.add_paragraph(guest)
        doc.add_paragraph('拝啓 時下ますますご盛栄のこととお慶び申し上げます。')
        doc.add_paragraph('このたび下記の通りパーティーを開催しますので、' +
                        'ご出席賜りますようよろしくお願い申し上げます。')
        doc.add_paragraph('敬具').alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
        doc.add_paragraph('記').alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        doc.add_paragraph('\t日時:8月1日 19:00')
        doc.add_paragraph('\t会場:ABCホテル')
        doc.add_paragraph('以上').alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
        doc.add_page_break()

    doc.save('invitation.docx')

使い方

  1. 招待リストを配置する
  2. Pythonを実行する

実行コマンド

python invitation_maker.py

実行例

youtu.be

参考文献

www.oreilly.co.jp

【Python】ファイルの文字コードを変換する

機能

ファイルの文字コードを変換するPythonコードです。

コード

#! Python3
# 機能
#  ファイルの文字コードを変換する
# 使い方
#  1.Pythonを実行する
# 実行コマンド
#  python file_encoder.py 入力フォルダ 出力フォルダ 入力文字コード 出力文字コード
#  python file_encoder.py input output shift_jis utf-8

import os
import sys
import codecs

def encode_file(input_folder, output_folder, enc_from, enc_to):
    os.makedirs(output_folder, exist_ok=True)

    for file_name in os.listdir(input_folder):
        print('Encoding {}...'.format(file_name))
        input_path = os.path.join(input_folder, file_name)
        output_path = os.path.join(output_folder, file_name)

        with codecs.open(input_path, 'r', enc_from) as input_file, \
            codecs.open(output_path, 'w', enc_to) as output_file:
            for row in input_file:
                output_file.write(row)

if len(sys.argv) != 5:
    sys.exit('使い方:python file_encoder.py 入力フォルダ 出力フォルダ 入力文字コード 出力文字コード')

encode_file(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])

使い方

  1. Pythonを実行する

実行コマンド

python file_encoder.py 入力フォルダ 出力フォルダ 入力文字コード 出力文字コード
python file_encoder.py input output shift_jis utf-8

実行例

youtu.be

参考文献

qiita.com

【Python】ツール一覧

Pythonで作成したツールの一覧です。

Pythonを一通り学習したけど、次に何を作ればいいか分からない人やちょっとしたツールを探している人に向けて作成しています。

文字列

【Python】テキストの各行にプレフィックスを追加する

【Python】テキストの各行に連番を追加する

【Python】サクラエディタのGrep結果をExcel用に整形する

【Python】日付の表記ゆれを統一する

ファイル

【Python】ファイル名にサフィックスを追加する

【Python】ファイル名の日付をアメリカ式から日本式に変換する

【Python】CSVファイルを元にフォルダを作成する

【Python】特定のファイルを新しいフォルダにコピーする

【Python】巨大なファイルを探す

【Python】最もディスク容量を使用しているフォルダを探す

【Python】特定の拡張子のファイルをアーカイブする

【Python】クリップボードのテキストを保存・復元・削除する

【Python】ファイルの文字コードを変換する

スクレイピング

【Python】コマンドラインで指定した住所をGoogleマップで開く

【Python】Flickrの検索結果をダウンロードする

【Python】ページのリンク切れをチェックする

Excel

【Python】テキストファイルをExcelに変換する

【Python】Excelをテキストファイルに変換する

【Python】Excel上の価格を更新する

【Python】Excelの行と列を入れ替える

CSV

【Python】CSVファイルから見出しを削除する

【Python】ExcelからCSVへ変換する

【Python】CSVからExcelへ変換する

PDF

【Python】複数のPDFファイルを一つに結合する

【Python】指定したページをPDFから削除する

【Python】PDFを暗号化する

Word

【Python】Wordから全テキストを取得する

【Python】招待リストから招待状を生成する

GUI

【Python】マウスカーソルの座標とRGB値を表示する

【Python】10秒ごとにマウスカーソルを動かして忙しそうに見せる

【Python】クリップボードのテキストを保存・復元・削除する

機能

クリップボードのテキストを保存・復元・削除するPythonコードです。

コード

#! Python3
# 機能
#  クリップボードのテキストを保存・復元・削除する
# 使い方
#  1.Pythonを実行する
# 実行コマンド
#  python mcb.pyw save <keyword> - クリップボードをキーワードに紐づけて保存
#  python mcb.pyw <keyword> - キーワードに紐づけられたテキストをクリップボードにコピー
#  python mcb.pyw list - 全キーワードをクリップボードにコピー
#  python mcb.pyw delete <keyword> - キーワードに紐づけられたテキストを削除

import os
import sys
import shelve
import pyperclip

os.makedirs('shelf', exist_ok=True)
with shelve.open('shelf/mcb') as shelf:

    if len(sys.argv) == 2:
        if sys.argv[1].lower() == 'list':
            pyperclip.copy(str(list(shelf.keys())))
        elif sys.argv[1] in shelf:
            pyperclip.copy(shelf[sys.argv[1]])

    elif len(sys.argv) == 3:
        if sys.argv[1].lower() == 'save':
            shelf[sys.argv[2]] = pyperclip.paste()
        elif sys.argv[1].lower() == 'delete':
            del shelf[sys.argv[2]]

使い方

  1. Pythonを実行する

実行コマンド

python mcb.pyw save <keyword> - クリップボードをキーワードに紐づけて保存
python mcb.pyw <keyword> - キーワードに紐づけられたテキストをクリップボードにコピー
python mcb.pyw list - 全キーワードをクリップボードにコピー
python mcb.pyw delete <keyword> - キーワードに紐づけられたテキストを削除

実行例

youtu.be

参考文献

www.oreilly.co.jp