it技術:python
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
it技術:python [2022/04/05 17:49] – 削除 yajuadmin | it技術:python [2022/04/22 10:31] (現在) – yajuadmin | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== Python ====== | ||
+ | C# | ||
+ | Visual Studio 2022を使用するも、途中で拡張機能が充実しているVisual Studio Codeに変更した。 | ||
+ | ===== Visual Studio関連 ===== | ||
+ | ==== Visual Studio上でUTF-8にして保存したい ===== | ||
+ | Visual StudioでPythonファイルを保存するとShift-JISになりデバッグエラーになってしまう。\\ | ||
+ | UTF-8で保存できるようにしたい。 | ||
+ | |||
+ | * EditorConfig ファイルをプロジェクトに追加する | ||
+ | * EditorConfig ファイルの下記内容を記載 | ||
+ | |||
+ | <code ini EditorConfig> | ||
+ | root = true | ||
+ | |||
+ | [*.py] | ||
+ | charset = utf-8 | ||
+ | </ | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ==== Visual Studioのエディターで行番号を表示する ==== | ||
+ | Pythonはエラーに行番号が出てくるので表示するようにしておく。 | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ===== Visual Studio Code関連 ===== | ||
+ | ==== 環境構築 ==== | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | ==== 拡張機能 ==== | ||
+ | [[https:// | ||
+ | |||
+ | 下記の拡張機能をインストール | ||
+ | |||
+ | * indent-rainbow | ||
+ | * ZenKaku | ||
+ | * Trailing Spaces | ||
+ | * Python Indent | ||
+ | * Python Docstring Generator | ||
+ | |||
+ | ===== コーディング関連 ===== | ||
+ | ==== コーディング規約 ==== | ||
+ | PEP(Python Enhancement Proposal)の中で、PEP 8は「Style Guide for Python Code」と銘打ち、Pythonのコードを記述する際の基本的なコーディングスタイルを定めている。 | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ==== main関数の書き方 ==== | ||
+ | Pythonはスクリプトなのでmain関数を定義する必要はありません。慣例的にmain関数を定義することがあります。 | ||
+ | |||
+ | <code python main> | ||
+ | import sys | ||
+ | |||
+ | def main(argv): | ||
+ | print(' | ||
+ | return 0 | ||
+ | |||
+ | if __name__ == ' | ||
+ | sys.exit(main(sys.argv)) | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ==== fromやimportの基礎 ==== | ||
+ | [[https:// | ||
+ | ==== コメント記載方法 ==== | ||
+ | Google Styleを採用 | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | <code python Googleスタイル> | ||
+ | def func_google(param1, | ||
+ | """ | ||
+ | Extended description of function. | ||
+ | |||
+ | Args: | ||
+ | param1 (int): Description of param1 | ||
+ | param2 (str): Description of param2 | ||
+ | |||
+ | Returns: | ||
+ | bool: Description of return value | ||
+ | """ | ||
+ | return True | ||
+ | </ | ||
+ | |||
+ | ==== 定義変数 ==== | ||
+ | <wrap em> | ||
+ | </ | ||
+ | |||
+ | Constクラスを作成して、その中でメンバ変数として定義する。重複定義とか気にせず単純にした。\\ | ||
+ | 定義変数は、英大文字を使用する。\\ | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | <code python const.py> | ||
+ | class Const(): | ||
+ | # クラス変数として定数を定義する | ||
+ | FOO = 1 | ||
+ | BAR = " | ||
+ | </ | ||
+ | |||
+ | 使用方法 | ||
+ | |||
+ | <code python main.py> | ||
+ | From Const import Const | ||
+ | a = Const.Foo | ||
+ | </ | ||
+ | |||
+ | ==== 文字列の囲み ==== | ||
+ | Python では、単一引用符 ' で囲まれた文字列と、二重引用符 " で囲まれた文字列は同じです。\\ | ||
+ | PEP 8では、どちらを推奨するかの立場は示しません。 | ||
+ | |||
+ | C# | ||
+ | |||
+ | === 文字列の長さ取得 === | ||
+ | C# | ||
+ | |||
+ | <code python> | ||
+ | ✕ " | ||
+ | |||
+ | ◯ len(" | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ==== switch case文はない ==== | ||
+ | Pythonにswitch文が実装されない理由として、公式ドキュメントには以下のように記述されています。 | ||
+ | >if… elif… elif… else の繰り返しで簡単に同じことができます。switch 文の構文に関する提案がいくつかありましたが、範囲判定をするべきか、あるいはどのようにするべきかについての合意は (まだ) 得られていません。 | ||
+ | [[https:// | ||
+ | |||
+ | If文を駆使することで同様の処理が行えるため、議論こそあったようですが実装はされなかったようです。\\ | ||
+ | しかし、Python3.10からはswitch文と同様の構文の「match文」が導入されます。 | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ==== フォーマット書式 ==== | ||
+ | <code python> | ||
+ | line = " | ||
+ | print(line) | ||
+ | # 山田さんの身長は190cmです。山田さんの体重は105.3kgです。 | ||
+ | </ | ||
+ | |||
+ | 単純に左から順に一対一になっている場合は、以下のようにインデックス番号を省略できます。 | ||
+ | <code python> | ||
+ | line = " | ||
+ | print(line) | ||
+ | # 山田さんの身長は190cmです。山田さんの体重は105.3kgです。 | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | === 日付書式 === | ||
+ | 代表的なものがこちらです。より詳しい情報は[[https:// | ||
+ | |||
+ | * %Y: 年(4桁) | ||
+ | * %y: 年(2桁) | ||
+ | * %m: 月 | ||
+ | * %d: 日 | ||
+ | * %H: 時 | ||
+ | * %M: 分 | ||
+ | * %S: 秒 | ||
+ | * %f: マイクロ秒 | ||
+ | * %A: 曜日 | ||
+ | * %a: 曜日(短縮形) | ||
+ | * %w: 曜日(数値: | ||
+ | |||
+ | <code python> | ||
+ | import datetime | ||
+ | |||
+ | dt = datetime.datetime.today() | ||
+ | print(dt) | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | === ミリ秒 === | ||
+ | %fはマイクロ秒なのでミリ秒にする。 | ||
+ | |||
+ | <code python> | ||
+ | from datetime import datetime | ||
+ | |||
+ | date_s = (datetime.now().strftime(' | ||
+ | |||
+ | print(date_s) # 2021-01-23 03: | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | ==== 例外処理 ==== | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | === 例外を発生させる === | ||
+ | 自作の例外を発生させるraiseの使い方 | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | === catchした例外をそのまま親まで届ける === | ||
+ | [[https:// | ||
+ | |||
+ | 式を伴わなければ、 raise は現在のスコープで最終的に有効になっている例外を再送出します。 | ||
+ | |||
+ | <code python> | ||
+ | try: | ||
+ | ... | ||
+ | except Exception as e: | ||
+ | raise | ||
+ | そもそもraiseには例外インスタンスが渡せるので | ||
+ | </ | ||
+ | <code python> | ||
+ | try: | ||
+ | ... | ||
+ | except Exception as e: | ||
+ | raise e # ★ | ||
+ | でもいいです。こちらだとTracebackに★の行の情報が加えられます。 | ||
+ | except節の中でifの分岐などでraiseが2箇所以上現れるならこちらで。 | ||
+ | </ | ||
+ | |||
+ | ==== 配列およびリスト処理 ==== | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ==== クラス内のメソッドを別のメソッド内で呼ぶ ==== | ||
+ | クラス内のメソッドを別のメソッド内で呼ぶと「name ' | ||
+ | 関数の順序は関係ない、クラス内のメソッドの第1引数は必ずselfを付け、self.xxx で呼び出す必要があった。 | ||
+ | |||
+ | Pythonではメソッドの第一引数は「self」が必須であり、自身のクラスのインスタンスを受け取るとコーディング規約で決まっているらしい。\\ | ||
+ | > | ||
+ | > | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | |||
+ | ===== 自作クラスで' | ||
+ | 原因はimportの書き方が間違っているから\\ | ||
+ | 以下の書き方だとエラーになる。 | ||
+ | |||
+ | <code python> | ||
+ | import myClass | ||
+ | myInstance = myClass() | ||
+ | </ | ||
+ | |||
+ | 下の書き方に修正すると動く。 | ||
+ | <code python> | ||
+ | from (myClassのファイル名) import myClass | ||
+ | myInstance = myClass() | ||
+ | </ | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | |||
+ | ===== コマンドライン引数の処理 ===== | ||
+ | [[https:// | ||
+ | |||
+ | ===== ファイル関連 ===== | ||
+ | ==== パス操作 ==== | ||
+ | <code python> | ||
+ | import os | ||
+ | |||
+ | filepath = r" | ||
+ | |||
+ | # ファイル名 os.path.basename() | ||
+ | print(os.path.basename(filepath)) | ||
+ | |||
+ | # フォルダ名 os.path.dirname() | ||
+ | print(os.path.dirname(filepath)) | ||
+ | |||
+ | # 拡張子の取得 os.path.splitext() | ||
+ | print(os.path.splitext(filepath)[1]) | ||
+ | |||
+ | # 拡張子なしのパス os.path.splitext() | ||
+ | print(os.path.splitext(filepath)[0]) | ||
+ | |||
+ | # 拡張子なしのファイル名 os.path.basename(), | ||
+ | print(os.path.splitext(os.path.basename(filepath))[0]) | ||
+ | |||
+ | # ルートディレクトリ os.path.splitdrive() | ||
+ | print(os.path.splitdrive(filepath)[0]) | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ==== ファイル読み書き ==== | ||
+ | [[https:// | ||
+ | |||
+ | ==== フォルダ未存在時作成 ==== | ||
+ | フォルダ名は、フルパスで指定すればいい。 | ||
+ | |||
+ | <code python> | ||
+ | import os | ||
+ | |||
+ | new_path = " | ||
+ | if not os.path.exists(new_path): | ||
+ | os.mkdir(new_path) | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ===== HTTP クライアント ===== | ||
+ | urllibライブラリーを使用する。 | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// |
it技術/python.1649148549.txt.gz · 最終更新: 2022/04/05 17:49 by yajuadmin