ファイル名を大文字から小文字に変換する
やりたいこと
大文字の拡張子でできた.pdf とかを自社のシステムにアップロードすると良くないことがおこるので、拡張子を小文字にしたい
原因
相手が勝手に.PDF とかで吐いてくるから(ドウシテ…
やり方
- lower メソッド を使う(逆に大文字にしたいときはupper メソッドを使う)
# 使い方 print("Hello".lower()) >> hello print("apple".upper()) >> APPLE
- 実際のやり方
# ダウンロードしてきたときのファイル名 を小文字にする filename = '20231216_BILL.PDF' filename = filename1.lower() # ダウンロードしたPDFファイル名をアップロード用に変更する # ダウンロードディレクトリは download_dir pdf_file_name_before = os.path.join(download_dir, filename) # アップロード用に社名を頭につける pdf_file_name = 'A社請求書_' + filename pdf_file_name_after = os.path.join(download_dir, pdf_file_name) #ダウンロードしたファイル名から、アップロード用にファイル名を変更する os.rename(pdf_file_name_before, pdf_file_name_after)
Windows環境でpython のzipfile ライブラリを使ったときに文字化けするのをなんとかしたい
やりたいこと
Windows環境でpython のzipfile ライブラリを使ったときに文字化けするのをなんとかしたい
そうは言っても相手側が勝手に送るzip なんでこっちで対策する必要がある場合
全部utf-8 で済ませられる人には関係ない話
原因
zipfile ライブラリがcp432 を使ってくるので、cp932 を使うようにzipfile ライブラリを書き換える
やり方
- zipfile ライブラリを探せ
path ってうってpython.exe ある場所わかるから、↓のフォルダ開いたらLib フォルダ見つけられると思う
path C:\Users\[ユーザ名]\AppData\Local\Programs\Python\Python38\
Lib フォルダ内の zipfile.py をコピペしてzipfileJPN.py にする
zipfileJPN.py をエディタで開いて cp437 を cp932 で置換
保存
import zipfileJPN exist_dir = '[展開したいフォルダ]' #ZIP展開する(展開後元ZIPは削除する) with zipfileJPN.ZipFile('sample.zip') as existing_zip: existing_zip.extractall(exist_dir) os.remove('sample.zip')
pfx の証明書を使ってpython のrequests でクライアント証明書を使ったアクセスを行う
やりたいこと
pfx のクライアント証明書経由でアクセスする必要があるサイトをpython のrequests でアクセスしたい
前提知識
pfx の証明書はPKCS#12 に相当し、証明書や秘密鍵、中間証明書が同梱された証明書となっている。
requests の使い方をドキュメントで調べると…
You can also specify the local cert file either as a path or key value pair:
requests-docs-ja.readthedocs.io
>>> requests.get('https://kennethreitz.com', cert=('/path/server.crt', '/path/key')) <Response [200]>
となっているので、crt とkey ファイルに分離すればいけそう。
上記のことから、pfx の証明書からpem 形式(非暗号化)に変換する必要がある。
証明書のエクスポート
PKCS#12(pfx)形式から、秘密鍵、公開鍵形式への変換方法
OpenSSLでPKCS#12形式から秘密鍵ファイルをエクスポートする
※要クライアント証明書のパスワード
openssl pkcs12 -in <PKCS#12ファイル名> -nocerts -nodes -out <秘密鍵ファイル名>
OpenSSLでPKCS#12形式から証明書ファイルをエクスポートする
※要クライアント証明書のパスワード
openssl pkcs12 -in <PKCS#12ファイル名> -clcerts -nokeys -out <証明書ファイル名>
OpenSSLでPKCS#12形式から中間CA証明書ファイルをエクスポートする
(今回使っているpfx にはなかった)
openssl pkcs12 -in <PKCS#12ファイル名> -cacerts -nokeys -out <中間CA証明書ファイル名>
実際にrequests に入れる
{証明書ファイル名} と {秘密鍵ファイル名} には↑で作成したそれぞれのファイルパスを指定する
import requests URL =" {アクセスするURL} " API_TOKEN=" {APIトークン} " headers = {"X-Cybozu-API-Token":API_TOKEN,'X-Requested-With':'XMLHttpRequest'} response =requests.get( URL , headers=headers,cert=('{証明書ファイル名}','{秘密鍵ファイル名}'))
無事にアクセスできました。
Python + Selenium でfileupload
Python + Selenium でfileupload しないといけないことがあったので、調べたのですが、日本語だと古い記事しか見つからなかったので、メモ。
開発環境 MacOS Catalina, Python3
XPath でファイルアップロードのinput 属性を指定して、send_keys でファイルパスを渡せばよい。
# アップロードするファイルパス uploadfile = './file/uploadfile.pdf' # ファイルアップロード driver.find_element_by_xpath('//input[@type="file"]').send_keys(uploadfile) # ファイルアップロード をクリック driver.find_element_by_xpath('//*[@id="btn_upload"]/').click()
これが こうなって
あとは、ファイルアップロードボタンをクリック(最後の行)すればupload できます。
python でjsonデータをHTML変換する
先日jsonからHTML変換して見た目をわかりやすくする必要があったので、それの覚え書きです。
開発環境 MacOS Catalina, Python3
json_to_html.py
# coding:utf-8 import json from collections import OrderedDict from jinja2 import Environment, FileSystemLoader,Template #HTMLテンプレートファイルの読み込み env = Environment(loader=FileSystemLoader('./', encoding='utf8')) tmpl = env.get_template('./templates/template.tmlp') #JSON ファイルの読み込み json_open = open('test.json', 'r') #順番どおり読むにはOrderedDict が必要 json_load = json.load(open('test.json',encoding='utf-8'),object_pairs_hook=OrderedDict) print (json.dumps(json_load,indent=2,ensure_ascii=False)) #HTML テンプレートに値をセットする html = tmpl.render(json_to_html= json_load) #HTML に書き込む(UTF-8にしないと文字化けする) with open('json_to_html.html',mode='w',encoding='utf-8') as f: f.write(str(html)) print(html)
内容は適当です。
test.json
[ { "list_A": "タイトル1", "list_B": "東京", "list_C": "晴れときどき曇り", "list_D": "20%", "list_E": "本州付近は高気圧に覆われています。" } ,{ "list_A": "タイトル2", "list_B": "埼玉", "list_C": "晴れ", "list_D": "10%", "list_E": "高気圧に覆われますが、湿った空気の影響を受ける見込みです。このため、曇りで夜遅くは雨の降る所があるでしょう。 " } ,{ "list_A": "タイトル3", "list_B": "千葉", "list_C": "曇り", "list_D": "0%", "list_E": "高波に注意してください。 " } ]
template.tmlp
<!DOCTYPE html> <html lang="ja"> <head> <title>JSON to HTML</title> <link rel="stylesheet" href="./html/style.css"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <div id="container"> <article id="contents"> <h1 class="title-webdesign">JSON からHTML 作成テスト</h1> <!--for文 でJSONを繰り返す--> {% for i in json_to_html %} <ul class="list-webdesign"> <div><p class="link-title-wd">{{ i.list_A }}</p> <p>都道府県:{{i.list_B}}</p> <p>天気:{{i.list_C}}</p> <p>降水確率:{{i.list_D}}</p> <p>その他:{{i.list_E}}</p> </div> </ul> {% endfor %} </article> <table> {% for i in json_to_html %} <tr> <th>タイトル</th> <td>{{i.list_A}}</td> </tr> <tr> <th>都道府県</th> <td>{{i.list_B}}</td> </tr> <tr> <th>天気</th> <td>{{i.list_C}}</td> </tr> <tr> <th>降水確率</th> <td>{{i.list_D}}</td> </tr> <tr> <th>その他</th> <td>{{i.list_E}}</td> </tr> {% endfor %} </table> </body> </html>
実行方法
$ python3 json_to_html.py
私は旧世代の人間なので、print で出力確認しながらHTMLファイルを作成しています。
HTMLを開けばこんな感じになります。
CSS は適当です。