にほんブログ村 IT技術ブログへ
にほんブログ村

Linux ブログランキングへ

2021年12月08日

SikuliX 先月頭、先月末など月を指定して変数を作る方法 datatime関数 RPA その2



今回はSikuliXのPythonで先月の頭、先月末などの日付を
変数で取得して先月1ヶ月分のデータを確保しようという方法。
Pythonではdateutilを使えと書いてありますがJythonには無いです。
意外と解説がなくて苦労しました。


●SikuliXで日付を変数で取得
こちらのページを参考にさせて頂きました。
ありがとうございます。

Pythonで先月を取得する
https://qiita.com/motchi0214/items/2451c1352bbcc0487492

標準でdatetimeをimportすれば時間の設定が出来るのですが、
どうやら月をまたいだ表現の解説がなさそうなので
ちょっと自作してみる事に

●Pythonプログラム
まず上のリンクサイト様を参考に下記をずっと読んで考える。

import datetime

# 今日を取得
today = datetime.datetime.today()
print today.strftime("%Y-%m-%d")

# 当月1日の値を出す
thismonth = datetime.datetime(today.year, today.month, 1)
print thismonth.strftime("%Y-%m-%d")

# 前月末日の値を出す
lastmonth = thismonth + datetime.timedelta(days=-1)
print lastmonth

# フォーマットを指定して、年月だけ拾う
print lastmonth.strftime("%Y%m")


これを改変して取り出したい日時を設定。
今回は先月の日なので難しそう・・・?
おや?
当たり前の事に気づきました。
そうですカッコ内の+や−の計算式を入れて調整できます。
これで好きな日時を調整出来ますね。
改造してみることに。

# 前月1日目の値を出す
lastmonth2 = datetime.datetime(today.year, today.month -1, 1)
print lastmonth2

# 前々月末日の値を出す

lastmonth3 = lastmonth2 + datetime.timedelta(days=-1)

print lastmonth3

こんな感じでlastmonth2を一行追加して
前月1日目〜前月末日を指定出来ました。
これでSikuliXで開始日と最終日を自由に設定できます。
簡単でした。

後はSikuliXで

paste( 画像 ,lastmonth2)
paste(lastmonth2.strftime("@Y@m@d"))

みたいに貼り付け作業pasteが関数を用いる事で簡単に操作出来ます。


●まとめ
簡単な事ですが、datetime関数だけで好きな日時を指定出来ました。
先月でも先々月でも昨年でも簡単です。
SikuliXで定義する変数を使い、文字列として入力すれば
自由に時間軸を操作して活用出来ます。
是非SikuliXで自由に時間軸の設定を操作してみてください。
posted by kapper at 06:59 | Comment(0) | Python

2021年11月12日

SikuliXで他のブログラムをサブルーチンとして呼び出して使う方法 RPA その1


今回はSikuliXで他のブログラムをサブルーチンとして呼び出す方法。
それらしい事は色々なサイトに書いてありますが、どうも理解出来ないw
やってみると意外と便利で使いまわしが簡単になるので良いです。
SikuliXは細かい使い方がいまいち日本語情報が少なくてやりにくいですけど

●SikuliXのサブルーチン
プログラムは長いとウザいですが、RPAの場合はどうしても長くなりがち。
なのでサブルーチン的な使い方をしたいのですが、
意外と検索エンジンにヒットしてこない。本にも書いてない。

しかもこのプログラムを延々と伸ばすのも、
小さい単位にして組み合わせた方が便利。
ここなどを参考に書いてみましょう。感謝。

https://inkoblog.com/how-to-reuse-sikulixscript/

●サブルーチン化
メインとなるコードとサブルーチンとするコードを書きます。割愛
(サブルーチン名)には作ったファイル、フォルダ名をそのまま。
文頭の3行と呼び出すサブルーチンのPathをsys.path.append()を
前もってフルパスで指定しておかないと認識しませんので注意

・メインルーチン側

# -*- coding: utf-8 -*-
import sys
from sikuli import *

sys.path.append(r:"C:\Users\(ユーザー名)\(サブルーチン名).sikuli")

import (サブルーチン名)


ざっくりですが、ここまで。
最後のimport (サブルーチン名)の行でサブルーチンのプログラムを実行しますw
Pythonってそういう文法だったっけ?

・サブルーチン側

# -*- coding: utf-8 -*-
import sys
from sikuli import *

{プログラム本体}


という形にして最初の3行は必要です。
間違っているとエラーが出るはずです。
むしろエラーが出まくるので原因がわからなかったり。

●まとめ
これでプログラムをぶった切って、つないでリサイクル出来ます。
なんかPythonのややこしい所とSikuliXのややこしい所が合体して
よくわかりませんよね。プログラムの書き方がw

でサブルーチンを実行する部分がimport サブルーチン名
ってなんじゃそりゃー。
Pathも書かないとどこにサブルーチンがあるか分からないエラーが出る。
サブルーチンが1つ、2つ、3つと増えればPath行もそれだけ必要です。
なぜならプログラムが*.pyだけじゃなくてフォルダー単位なのがSikuliXの特徴だからです。
余計わかりにくい・・・
まあ作ってみて慣れましょうか。
動きゃOKです・・・
posted by kapper at 21:23 | Comment(0) | Python

2021年11月02日

Pythonトラブル対策集 Windows環境のCondaを職場でアップデートしたらProxyが繋がらなくなった対策 その1



今回は職場の先輩から「CondaでProxyが繋がらなくなった」という対策。
知っている人は知っているかもしれないが、ヤバイ。


●CondaのProxy設定
Proxy設定方法は.condarcファイルをc:\Users\(ユーザー名)\に置いて
Proxy設定を書き込むだけですが、
Condaをアップデートしたら繋がらなくなりました。
これはアカンという事でエラーメッセージをググるとgithubに報告がありました。

conda 4.7.12 ProxyError - proxy server settings that work with conda 4.3 fail with conda 4.7.12
#9497
https://github.com/conda/conda/issues/9497

かなり前の話ですが一応今年です。

従来は

ssl_verify: True
proxy_servers:
http: http://id:password@xxx.xxx.xxx.xxx:8080
https: https://id:password@xxx.xxx.xxx.xxx:8080

みたいな感じで書いて保存するんですが、これだとエラーが出ます。
正しくは、

ssl_verify: True
proxy_servers:
http: http://id:password@xxx.xxx.xxx.xxx:8080
https: http://id:password@xxx.xxx.xxx.xxx:8080

という感じでhttps: の後をhttp://〜に修正します。
ここの.condarcしか読まないので、再起動とかは不要です。
ちゃんとProxyに接続してCondaがネットに繋がりました。

●まとめ
簡単ですが、ヤバイです。
特に職場でCondaを使っている人は注意しましょう。
結構有名な話ですが、日本語文献にはまだあまり出てきませんので
エラーメッセージを1年以内条件でググらないとなかなか出てこないと思います。
もしProxyに繋がらなくなったら是非試してみて下さい。
posted by kapper at 20:00 | Comment(0) | Python
にほんブログ村 IT技術ブログへ
にほんブログ村

Linux ブログランキングへ