作成中
カテゴリー: Python
Python 基本メモ Shell
< コード例 >
# smbstatus shell 実行 # args = ["smbstatus", "-L"] output= subprocess.check_output(args, shell=True, encoding='utf8')
Python 基本メモ メール送信
< コード例 >
## 完了メール配信 ## TO_ADDRS = ["????????@gmail.com", "???????@?????.co.jp"] smtp_server = "???????" port = ?? server = smtplib.SMTP(smtp_server, port) server.set_debuglevel(True) message = MIMEMultipart() message["Subject"] = "@@ タイトル @@" message["To"] = ",".join(TO_ADDRS ) message["From"] = "??????" text = MIMEText("本文") message.attach(text) server.send_message(message) server.quit()
Python 基本メモ import_moduleでクラスを動的import
Pythonで書いた1回限りの処理用の使い捨てスクリプトをスケジュールで定期的に処理する必要があって、調べてましたが、まだ初心者で、ダブルアンダースコアの変数の使い方がよくわからず、
意図した動作が出来ないので、使うスクリプトをクラスにしましたところ、うまく動きめでたく解決しました。
昔、Javaのリフレクションを使って同様のことをしてましたが、長いコードが必要だったのが、短く済みすっきりと出来ました。
< コード例 >
コマンドライン引数で指定した自作モジュールのインポート
import importlib
# クラス名引数 #
args = sys.argv
module_name = ""
if len(args) != 2:
print("No argument unable to continue!!")
sys.exit()
#module_name = "MatsumotoClass"
else:
module_name = args[1] + "Class"
sttm = int(time.time())
## 動的モジュール読込 ##
mod = importlib.import_module(module_name)
## インスタンス化 ##
md = mod.ExecClass()
Python 基本メモ 関数内関数
Javascriptと同じく関数内関数が使えるので使ってみました。
別の関数にするまでもない短いのや、勘違いして必要なデータ取得が欠けた時とかに使ってます。
< コード例 >
# 店舗ページから住所取得 #
def getAddr (url) -> str:
soup = sp.Soup.getSoupText(URL_TOP + url)
return soup.find_all("td")[0].text[10:]
namelist = [p.text for p in soup.find_all("p", class_="title")
if p.text.endswith("店")]
# 住所が別ページだったので関数内関数で取得 #
addrlist = [getAddr(p.find("a")["href"]) for p in soup.find_all("p", class_="title") if p.text.endswith("店")]
Python 基本メモ Googleジオコーダー
クラスにしてみました。
import googlemaps
class Google:
API_KEY = "???????????????????????????????????????"
'''
コンストラクタ
'''
def __init__(self, address):
self.address = address
# ジオコーダー実行 経緯度、郵便番号返却 #
def getLatLonZip(self) -> dict:
dict = {"lat": -500, "lon": -500, "zip": "000-0000"}
gmaps = googlemaps.Client(key=Google.API_KEY)
result = gmaps.geocode(self.address)
#print(result[0])
if len(result) > 0:
lat = result[0]["geometry"]["location"]["lat"]
lon = result[0]["geometry"]["location"]["lng"]
dict["zip"] = ""
addrcomps = result[0]["address_components"]
for adc in addrcomps:
if adc["types"][0] == "postal_code":
dict["zip"] = adc["long_name"]
print (lat,lon, zip)
dict["lat"] = lat
dict["lon"] = lon
return dict
import
import geoclass.Google as g
呼び出し
# 経緯度、郵便番号ジオコーダー # geo = g.Google(addr) llz = geo.getLatLonZip()
Python 基本メモ データクラス
< コード例 >
アノテーションを入れます
デフォルト値をセット (オプション)
from dataclasses import dataclass, field
@dataclass
class YardLATLON():
OBJECTIDS: str = ""
CNT_LAT: int = 0
CNT_LON: int = 0
YARDNAME: str = ""
STATEAB: str = ""
LATS: str = ""
LONS: str = ""
Python 基本メモ データクラス
< コード例 >
クラス
'''
住所録データクラス
'''
from dataclasses import dataclass, field
@dataclass
class Address():
gp: str # グループ名
list: str # リスト名
name: str # 施設店舗名
addr: str # 住所
tel: str # 電話番号
lat: float # 緯度
lon: float # 経度
zip: str # 郵便番号
icon: str # マーカーアイコンファイル名
## 辞書型を使った場合 ##
# dict = {"gp": GP, "list": LIST_NAME, "name": name, "addr": addr, "tel": tel,
# "lat": llz["lat"], "lon": llz["lon"], "zip": llz["zip"], "icon": ICON_NAME}
import
import dclass.AddressData as ad
値の格納
# データクラス #
add: ad.Address = ad.Address(gp=GP, list=LIST_NAME, name=nm, addr=addr, tel="",
lat=llz["lat"], lon=llz["lon"], zip=llz["zip"], icon=ICON_NAME)
print(add)
dictlist_dc.append(add)
Python 基本メモ ループでzipを使う
最近になって、Pythonを始めてみました。
Javaで行っていたWEBページのスクレープをPythonに移行中です。
今更ながらと言われるかも知れませんが、Javaに比べてコードが大きく減らせて、大幅生産性向上が出来て驚いてます。
そんな中で、リスト内包表記と同じく便利なので使ってるzip関数による複数変数ループを備忘録しておきます。
< コード例 >
## ++ 店名 住所 電話番号 走査 ++ ##
for nm, addr, tel in zip(namelist, addrlist, tellist):
# 経緯度、郵便番号ジオコーダー #
if addr is not None and addr != "":
geo = g.Google(addr)
llz = geo.getLatLonZip()
dict = {"gp": GP,"list": LIST_NAME, "name": nm, "addr": addr, "tel": tel,
"lat": llz["lat"], "lon": llz["lon"], "zip": llz["zip"], "icon": ICON_NAME}
print(dict)
dictlist.append(dict)
return dictlist
コメントを投稿するにはログインしてください。