見出し画像

Python基礎(番外編1):ID・PASSの管理

1.概要

 Webスクレイピング時などでID, Passwordを入力する場面がありますがコードに直接記載したくないことがあります。セキュリティ的に
 今回は別ファイルから値を読み出す手法を紹介します。

2.サンプルファイル

 今回ユーザーネームとパスワードはそれぞれ 'KIYO'、 'note1234'とします。まず初めに今回使用するファイルtxt, Jsonファイルを自作しておきます。

[In]
#IDとPASSをテキストファイルに作成
with open('secret.txt', 'w') as f:
    f.write('{username:KIYO}\n{password:note1234}')
    
#IDとPASSをJSONファイルに作成
with open('secret.json', 'w') as f:
    f.write('''
            {
            "username":"KIYO",
            "password":"note1234"
            }
            ''')    

3.Txtファイルを使用

 いわゆるメモ帳で作ったファイルからデータを読み込みます。

3-1.txtファイルの構成

 textファイルの構成として、ほしいデータごとここでは辞書型に改行しております。

[secret.txt]
{username:KIYO}
{password:note1234}

3-2.txtファイル内データの取得

 textファイルのデータを改行ごとにリスト形式で取得するには①with openでtextファイルを読み込み、②\n改行で文字列を分割します。

[In]
with open('secret.txt', 'r') as f:
    text = f.read()

print(text)
print(text.split('\n'))
for i in text.split('\n'):
    print(i)
[Out]
#print(text)
{username:KIYO}
{password:note1234}

#print(text.split('\n'))
['{username:KIYO}', '{password:note1234}']

#For文で取得
{username:KIYO}
{password:note1234}

4.JSONファイルを使用

 拡張子がjsonであるJSONファイルからデータを読み込みます。

4-1.JSONファイルの構成

 JSONファイルを作成しますが注意点は下記の通りです。

【JSONファイルの注意点】
●データは'シングルではなく"ダブルを使用すること
●最後の行に,カンマは不要。それ以外は必須

[secret.json]
{
"username":"KIYO",
"password":"note1234"
}

4-2.JSONファイル内データの取得

 JSONファイルはjsonライブラリで読み込みます。戻り値は辞書型のため辞書と同じ扱いができます。

[In]
import json
with open('secret.json', 'r') as f:
    data = json.load(f)

print(data)
print(data['username'])
print(data['password'])
[Out]
#print(data)
{'username': 'KIYO', 'password': 'note1234'}
#print(data['username'])
KIYO
#print(data['password'])
note1234

5.自作モジュール

 本章ではID, Password専用のモジュールを作成します。ファイルの構成としてsecretkiyo.pyモジュール用pyファイルを同じディレクトリに保存します。

5-1.モジュールにクラスの定義

 モジュールファイルsecretkiyo.pyに下記を考慮してデータ記載します。

【モジュールファイル作成時の留意点】
●使用する時に覚えやすいように@dataclassを使用して値をシンプルに取得
●自分が覚えやすいパターンでクラスを作成
 パターン1:class名=サイト、変数=id, pass
 パターン2:class名=ID, Pass、変数:各サイト

[secretkiyo.py]
from dataclasses import dataclass

#パターン1
@dataclass
class Kiyo:
    id = 'KIYO'
    password = 'note1234'

#パターン2
@dataclass    
class Id:
    note = 'KIYO'
    twitter = 'KIYO_Twitter'
    
@dataclass    
class Password:
    note = 'note1234'
    twitter = 'Twitter1234'

5-2.モジュールのメソッド確認

 同じ作業ディレクトリ内であればimport modulepyファイルでファイルを読み込めます。注意点として「moduleを書き換えたら一度ファイルを再起動」する必要があります。

[In ※note_python番外編1_ID, PASS管理.ipynb ファイル]
import secretkiyo

print(type(secretkiyo))
print(dir(secretkiyo))
[Out]
<class 'module'>

['Id', 'Kiyo', 'Password', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'dataclass']

 dir()関数より作成したモジュール内に上記で作成したクラス(Id, Kiyo, Password)が作成されていることが確認できます。

5-3.データの取得:インスタンス化

 取得方法は①インスタンス化、②変数の呼び出しで可能です。

[In] パターン1
import secretkiyo

KIYO = secretkiyo.Kiyo()
print(KIYO.id, KIYO.password)

[Out]
KIYO note1234
[In] パターン2
import secretkiyo

ID = secretkiyo.Id()
PASS = secretkiyo.Password()

print(ID.note, ID.twitter)
print(PASS.note, PASS.twitter)

[Out]
KIYO KIYO_Twitter
note1234 Twitter1234

5-4.参考_モジュールの名前

 モジュールの名前で”secret_kiyo.py”のように_アンダーバーを入れたらうまく読み込めませんでした。細かい部分は理解したら追って記載予定。


参考資料

あとがき

 SQLとかでサクッと取れたらいいかもしれないけどそこまでのスキルはないため、追ってよりよい案を検討。
 ただ自分用のやつはID, PASSWORDは直打ちすることが多いのでそこまでやる気はでないかな・・・・


いいなと思ったら応援しよう!