以下のスクリプトをpdfrmpass.pyという名前で保存し,コマンドプロンプトや端末で
python <pdfrmpass.pyまでのパス> <1つ目のPDFファイルまでのパス> [<2つ目のPDFファイルまでのパス> ...] <パスワード> ⏎
あるフォルダに入っているPDFファイル全てを対象にする場合は
python <pdfrmpass.pyまでのパス> <1つ目のフォルダまでのパス> [<2つ目のフォルダまでのパス> ...] <パスワード> ⏎
([と]の間は省略可能,⏎はエンターキー)と入力して使用します.
※数式が入っているセルに対しては,数式文字列ではなく計算結果の文字列を比較します.
以下のスクリプトをdiffxls.pyという名前で保存し,コマンドプロンプトや端末で
python <ワークブックAまでのパス> <ワークブックBまでのパス> [-p <ワークブックAかつBの読み取りパスワード> | [-pA <ワークブックAの読み取りパスワード>] [-pB <ワークブックBの読み取りパスワード>]] ⏎
([と]の間は省略可能,|で区切られた項目はどれかを選択,⏎はエンターキー)と入力して使用します.
結果は
Sheet "Sheet2", cell "A8": hh -> aa
のように,
Sheet "シート名", cell "セル名": ワークブックAでの値 -> ワークブックBでの値
として表示されます.xlsx, xls両方に対応しています.
Webのフォームでは,「テキストボックスに項目を入力して,追加ボタンを押す」動作を繰り返すことがあります.これって結構めんどくさい.そこで,クリップボードにコピーした文字列をテキストボックスに入力して,追加ボタンを押すスクリプトを作りました.ただし,文字列は半角文字であるとし,改行またはタブで区切られているものとします.例えば
dog
cat
bird
のようなテキストをコピーする場合,dog, cat, birdの3つそれぞれが入力,追加されます.
以下のスクリプトをclicktypeclick.pyという名前で保存し,コマンドプロンプトや端末で
clicktypeclick.py ⏎
(⏎はエンターキー)と入力して使用します.ウインドウにメッセージが現れますので,従って下さい.
このスクリプトは,Wordで起こる以下の厄介な2点を解決します.
書式変更の履歴は他の変更履歴が見えなくなるほど多くなりがちです.そのくせ元に戻すことはなく,単に承諾するだけのものがほとんどです.そこで,書式変更の変更履歴を一括で削除します.
「図表番号の挿入」で,数式の中に#を使って数式番号を挿入(ここの説明を参照,4枚目の画像まで)した後で,本文中で「相互参照」を使うと,参照した部分に数式全体が表示されてしまいます.これを式番号だけが表示されるようにします.
以下のスクリプトをwordfix.pyという名前で保存し,コマンドプロンプトや端末で以下を入力します.⏎はエンターキーです:
python wordfix.py <書式変更の履歴を削除したいWordファイルへのパス.docx> ⏎
すると,(拡張子.docxの手前に番号がついた)別名のファイルに修正後の内容が保存され,それがWordで表示されます.
また,オプションで,誤記チェック結果とtextlintを使った校正結果を表示します.その場合は以下を入力します.⏎はエンターキーです:
python wordfix.py -c <書式変更の履歴を削除したいWordファイルへのパス.docx> ⏎
誤記チェックには,Al Sweigart 著, 相川 愛三 訳, "退屈なことはPythonにやらせよう―ノンプログラマーにもできる自動化処理プログラミング", (2017), オライリー・ジャパンの「D.2 誤記検出ツール」を使用しています.語句を文字コード順に並べ,
1回しか使われていない語句 (使われた回数) | その前の語句 (使われた回数), 後の語句 (使われた回数)
を表示させることで,誤記かどうかを判断させるツールです.
textlintを使った校正では,ホームフォルダの直下にtextlintという名前のフォルダがあり,適切に設定されていることを想定しています.textlintフォルダがない場合は,プログラムがまずtextlintフォルダを作り,そこに
.textlintrc.json(textlintに関する設定ファイル)
prh.yml(ルールprhで,除外して欲しい記述を指定するファイル,ここを参考にしました)
を作ります.Node.js (npm)とtextlint,および必要なルールをインストールするよう指示されますので,それに従って下さい.
textlintフォルダに関する設定ができていれば,Wordファイルから文字列を抽出,textlintを実行して,校正結果を表示します.「ここはミスだな」という所に気がついたら,元のWordファイルを修正して下さい.
.textlintrc.jsonの中身は以下のとおりです:
prh.ymlの中身は以下のとおりです:
本スクリプトでも表示されますが,こっちのほうが便利かもしれないのでNode.js (npm)とtextlintのインストール方法を書いておきます.
https://nodejs.org/en/からNode.js (npm)のインストーラーをダウンロードして下さい.
コマンドプロンプトまたは端末で以下のコマンドを入力します.⏎はエンターキーです.
cd %homepath%\textlint ⏎(Windowsの場合)
cd ~/textlint ⏎(Mac/Linux/Unixの場合)
npm init --yes && npm install --save-dev textlint && npm install --save-dev textlint-rule-preset-ja-technical-writing && npm install --save-dev textlint-rule-prh && npm install --save-dev textlint-rule-write-good ⏎
オンライン会議用に,時計とストップウォッチがあると便利だと思って作りました.wxPythonの良い練習にもなるし,自作しておけばカスタマイズも簡単にできますから.このプログラムの実行ウインドウをOBSの「ウインドウキャプチャ」で捉えてから「仮想カメラを開始」し,オンライン会議アプリでビデオ入力を「OBS Virtual Camera」にすれば,自分の画面が時計およびストップウォッチ表示にできます.
断面は平面であるとします.
測定点は3つ以上必要です.
正方形を2つの三角形に分割する時のように,デローニー分割には任意性がある場合があります.測定点が少ない時には,この任意性で概算値が正解から大きく外れる場合があります.
管内流れの流速測定データが正しいかを判断する際に,「断面に垂直な方向の速度を断面で面積分して,それが設定した流量と一致するか?」というチェックをよく行います.速度の測定点が碁盤の目に並んでいる場合は,
(測定点が受け持っている面積×その測定点での垂直方向速度)の総和
をとれば近似的に流量が求められるのですが,碁盤の目に並んでいない場合は,受け持っている面積をうまく求められないものです.
そこで,測定点をデローニー分割して,測定点を頂点とする三角形で断面を分割し,それぞれの三角形の頂点から垂直で,長さが速度になる辺を持つ三角柱を作成し,それらの三角柱の体積を全て足し合わすことで近似的に流量を求めるスクリプトを作成しました.
まず,測定点がx-y平面上にあるとし,z方向速度をwとします.各行にx, y, wが書かれているテキストデータファイルを用意します.例えばこんな感じです.
#x y z
0.0 0.0 0.0
1.0 0.0 0.0
1.0 1.0 0.0
0.0 1.0 0.0
0.5 0.5 1.0
(測定してはいないでしょうが)速度が0になる壁面での点も書き込んでおかないといけません.
そして,以下のスクリプトをflowrate.pyという名前で保存し,コマンドプロンプトや端末で
python <flowrate.pyまでのパス> <データファイルまでのパス> [-s '<読み飛ばす行の先頭に書かれている文字>'] [-x <xの列番号>] [-y <yの列番号>] [-w <wの列番号>] [-d '<区切り文字>'] ⏎
([と]の間は省略可能,⏎はエンターキー)と入力して使用します.
オプションを省略した際のデフォルト値は以下のとおりです.
<読み飛ばす行の先頭に書かれている文字> = #
<xの列番号> = 1, <yの列番号> = 2, <wの列番号> = 3
<区切り文字> = 半角スペースまたはタブ
上の例の場合,以下のように出力され,流量(flow rate)は0.333333333333と概算されます.
[[x y w], ...] =
[[0. 0. 0. ]
[1. 0. 0. ]
[1. 1. 0. ]
[0. 1. 0. ]
[0.5 0.5 1. ]]
flow rate = 0.333333333333
以下のスクリプトをexcelmerge.pyという名前で保存して,コマンドプロンプトで
python excelmerge.py <フォルダのパス> ⏎
(⏎はエンターキー)と入力して実行して下さい.フォルダ内にある拡張子.xlsx, .xlsのファイルの全シートに書かれているデータを縦に並べて1つのエクセルファイルにまとめます.そのファイルはフォルダの中に作られ,名前は「フォルダ名_merged.xlsx」になります.1列目には「[ファイル名]シート名!*2」の様に,どのファイルのどのシートの何行目のデータなのかを示した情報が記入されます.
なお,データを横(horizontally)に並べたい場合は
python -h excelmerge.py <フォルダのパス>
と入力して実行して下さい.1行目には「[ファイル名]シート名!B*」の様に,どのファイルのどのシートの何列目のデータなのかを示した情報が記入されます.
以下のスクリプトをfindmatchfiles.pyという名前で保存して,コマンドプロンプトで
python findmatchfiles.py <フォルダのパス> ⏎
(⏎はエンターキー)と入力して実行して下さい.指定したフォルダ以下の全てのファイルに対して拡張子,最終更新日時,内容を調べ,これらが全て同じファイルをリストアップします.なお,ファイル名の先頭が'.'または'~'であるファイルは対象にしません.
拡張子,最終更新日時,内容が同じファイルが見つかった場合は
---- Matching files -----
--
"C:¥folder1¥hogehoge1.docx"
"C:¥folder1¥hogehoge3.docx"
"C:¥folder1¥folder2¥hogehoge1.docx"
--
"C:¥folder1¥hogehoge4.docx"
"C:¥folder1¥folder2¥hogehoge4A.docx"
--
のように同じファイルを--区切りで表示します.
見つからない場合は
No matching files.
とだけ表示します.
重複したファイルを消して整理したい,と思った場合は以下の作業を行います:
---- Matching files -----以下で表示されたファイルをコピーし,テキストエディタに貼り付ける.
貼り付けた内容のうち,消したいファイル名だけを残す.
先頭にdel (delと半角スペース)を付け加える.(Unixの場合はdelではなくてrm)
例えば以下のようです:
del "C:¥folder1¥hogehoge3.docx"
del "C:¥folder1¥folder2¥hogehoge1.docx"
del "C:¥folder1¥hogehoge4.docx"
これをコピーして,コマンドプロンプト(Unixの場合は端末)に貼り付けてEnterキーを押せば,重複したファイルを消すことができます.エクスプローラでいちいちパスを確認するよりも,よっぽど簡単です.