7 つの簡単なステップで Python を使用してコマンドライン アプリを構築する - KDnuggets

7 つの簡単なステップで Python を使用してコマンドライン アプリを構築する – KDnuggets

ソースノード: 2549521

7 つの簡単なステップで Python を使用してコマンドライン アプリを構築する
著者による画像
 

単純なプロジェクトを構築することは、Python やその他のプログラミング言語全般を学習するのに最適な方法です。 for ループの記述、組み込み関数の使用、ファイルの読み取りなどの構文を学習できます。しかし、実際に「学ぶ」のは、何かを作り始めたときだけです。

「構築して学習する」アプローチに従って、コマンド ラインで実行できる単純な TO-DO リスト アプリをコーディングしてみましょう。その過程で、コマンドライン引数の解析やファイルとファイル パスの操作などの概念を学習します。カスタム関数の定義などの基本も再確認します。

だから始めましょう!

このチュートリアルに沿ってコーディングすると、コマンド ラインで実行できる TO-DO リスト アプリを構築できるようになります。では、アプリに何をしてもらいたいですか? 

紙の TO-DO リストと同じように、タスクを追加したり、すべてのタスクを検索したり、タスクを完了した後に削除したり (そう、取り消し線を引くか、紙に完了のマークを付ける) ことができる必要があります。そこで、次のことを実行できるアプリを構築します。

タスクをリストに追加します。
 

7 つの簡単なステップで Python を使用してコマンドライン アプリを構築する
著者による画像
 

リスト上のすべてのタスクのリストを取得します。

 

7 つの簡単なステップで Python を使用してコマンドライン アプリを構築する
著者による画像
 

また、終了後にタスクを (インデックスを使用して) 削除します。

 

7 つの簡単なステップで Python を使用してコマンドライン アプリを構築する
著者による画像
 

さあ、コーディングを始めましょう!

まず、プロジェクト用のディレクトリを作成します。そして、プロジェクト ディレクトリ内に Python スクリプト ファイルを作成します。これは、To-Do リスト アプリのメイン ファイルになります。それを呼びましょう todo.py

このプロジェクトにはサードパーティのライブラリは必要ありません。したがって、必ず最新バージョンの Python を使用していることを確認してください。このチュートリアルでは Python 3.11 を使用します。

todo.py ファイルを作成するには、まず必要なモジュールをインポートします。シンプルな To Do リスト アプリの場合、次のものが必要です。

  • 引数解析 コマンドライン引数の解析用 
  • os ファイル操作用

それでは、両方をインポートしてみましょう。

import argparse
import os

タスクの追加、一覧表示、および削除にはコマンドライン フラグを使用することを思い出してください。各引数に短いオプションと長いオプションの両方を使用できます。私たちのアプリでは、次のものを使用しましょう。

  • -a or --add タスクを追加するには
  • -l or --list すべてのタスクをリストするには
  • -r or --remove インデックスを使用してタスクを削除するには

ここでは、argparse モジュールを使用して、コマンド ラインで指定された引数を解析します。定義します create_parser() 次のことを行う関数:

  • を初期化します ArgumentParser オブジェクト (オブジェクトと呼びましょう) parser). 
  • タスクを追加、リスト、および削除するための引数を、 add_argument() パーサーオブジェクトのメソッド。 

引数を追加するときは、短いオプションと長いオプションの両方と、対応するヘルプ メッセージを追加します。それで、これが create_parser() 関数:

def create_parser():
    parser = argparse.ArgumentParser(description="Command-line Todo List App")
    parser.add_argument("-a", "--add", metavar="", help="Add a new task")
    parser.add_argument("-l", "--list", action="store_true", help="List all tasks")
    parser.add_argument("-r", "--remove", metavar="", help="Remove a task by index")
    return parser

次に、次のタスク管理操作を実行する関数を定義する必要があります。

  • タスクの追加
  • すべてのタスクをリストする
  • インデックスによるタスクの削除

次の機能 add_task 単純なテキスト ファイルを操作して、TO-DO リストの項目を管理します。ファイルを「追加」モードで開き、タスクをリストの最後に追加します。

def add_task(task):
    with open("tasks.txt", "a") as file:
    file.write(task + "n")

をどのように使用したかに注目してください。 with ファイルを管理するためのステートメント。そうすることで、エラーが発生した場合でも操作後にファイルが確実に閉じられ、リソース リークが最小限に抑えられます。 

詳細については、効率的なリソース処理のためのコンテキスト マネージャーに関するセクションを参照してください。 効率的な Python コードの作成に関するこのチュートリアル.

  list_tasks 関数は、ファイルが存在するかどうかを確認して、すべてのタスクをリストします。このファイルは、最初のタスクを追加するときにのみ作成されます。まずファイルが存在するかどうかを確認し、次にタスクを読み取って出力します。現在タスクがない場合は、役立つメッセージが表示されます。 :

def list_tasks():
    if os.path.exists("tasks.txt"):
        with open("tasks.txt", "r") as file:
            tasks = file.readlines()
        	for index, task in enumerate(tasks, start=1):
                print(f"{index}. {task.strip()}")
    else:
        print("No tasks found.")

また、 remove_task インデックスによってタスクを削除する機能。 「書き込み」モードでファイルを開くと、既存のファイルが上書きされます。そこで、インデックスに対応するタスクを削除し、更新された TO-DO リストをファイルに書き込みます。

def remove_task(index):
    if os.path.exists("tasks.txt"):
        with open("tasks.txt", "r") as file:
            tasks = file.readlines()
        with open("tasks.txt", "w") as file:
            for i, task in enumerate(tasks, start=1):
                if i != index:
                    file.write(task)
        print("Task removed successfully.")
    else:
        print("No tasks found.")

コマンドライン引数を解析するためにパーサーをセットアップしました。また、タスクの追加、リスト、削除のタスクを実行する関数も定義しました。それで、次は何でしょうか?

おそらくあなたはそれを推測したでしょう。受け取ったコマンドライン引数に基づいて正しい関数を呼び出すだけで済みます。を定義しましょう main() を使用してコマンドライン引数を解析する関数 ArgumentParser ステップ 3 で作成したオブジェクト。 

指定された引数に基づいて、適切なタスク管理関数を呼び出します。これは、次のような単純な if-elif-else ラダーを使用して実行できます。

def main():
    parser = create_parser()
    args = parser.parse_args()

    if args.add:
        add_task(args.add)
    elif args.list:
        list_tasks()
    elif args.remove:
        remove_task(int(args.remove))
    else:
        parser.print_help()

if __name__ == "__main__":
    main()

コマンド ラインから TO-DO リスト アプリを実行できるようになりました。短いオプションを使用する h または長いオプション help使用状況に関する情報を取得するには:

$ python3 todo.py --help
usage: todo.py [-h] [-a] [-l] [-r]

Command-line Todo List App

options:
  -h, --help  	show this help message and exit
  -a , --add  	Add a new task
  -l, --list  	List all tasks
  -r , --remove   Remove a task by index

最初はリストにタスクが存在しないため、次のように使用します。 --list すべてのタスクをリストするには、「タスクが見つかりません。」と出力します。

$ python3 todo.py --list
No tasks found.

次に、次のように TO-DO リストに項目を追加します。

$ python3 todo.py -a "Walk 2 miles"

ここで項目をリストすると、タスクが追加されたことが確認できるはずです。

$ python3 todo.py --list
1. Walk 2 miles

最初の項目を追加したため、tasks.txt ファイルが作成されています (タスクの定義を参照してください)。 list_tasks ステップ 4) の関数:

$ ls
tasks.txt  todo.py

別のタスクをリストに追加してみましょう。

$ python3 todo.py -a "Grab evening coffee!"

そしてもう一つ:

$ python3 todo.py -a "Buy groceries"

次に、すべてのタスクのリストを取得しましょう。

$ python3 todo.py -l
1. Walk 2 miles
2. Grab evening coffee!
3. Buy groceries

次に、インデックスを使用してタスクを削除しましょう。夜のコーヒーを飲み終えたので (できればその日のコーヒーも)、次のように削除します。

$ python3 todo.py -r 2
Task removed successfully.

変更後の TO-DO リストは次のとおりです。

$ python3 todo.py --list
1. Walk 2 miles
2. Buy groceries

これで、アプリの最も単純なバージョンが完成しました。では、これをさらに進めるにはどうすればよいでしょうか?以下に試してみることができることがいくつかあります。

  • 無効なコマンドライン オプションを使用するとどうなるか (たとえば、 -w or --wrong)?デフォルトの動作 (if-elif-else ラダーを思い出した場合) はヘルプ メッセージを出力することですが、例外も発生します。 Try-Except ブロックを使用してエラー処理を実装してみてください。
  • エッジケースを含むテストケースを定義してアプリをテストします。まず、組み込みの単体テスト モジュールを使用できます。
  • 各タスクの優先順位を指定するオプションを追加して、既存のバージョンを改善します。また、タスクを優先度に従って並べ替えて取得してみてください。

このチュートリアルのコードは GitHub にあります.

このチュートリアルでは、シンプルなコマンドライン TO-DO リスト アプリを構築しました。そうすることで、組み込みの argparse モジュールを使用してコマンドライン引数を解析する方法を学びました。また、コマンド ライン入力を使用して、内部で単純なテキスト ファイルに対して対応する操作を実行しました。 

さて、次はどこに行きましょうか?さて、Pythonライブラリのようなもの Typer コマンドライン アプリの構築が簡単になります。今後の Python チュートリアルでは、Typer を使用してこれを構築します。それまではコーディングを続けてください。
 
 

バラ プリヤ C インド出身の開発者兼テクニカル ライターです。彼女は、数学、プログラミング、データ サイエンス、コンテンツ作成が交わる場所で働くのが好きです。彼女の興味と専門分野には、DevOps、データ サイエンス、自然言語処理が含まれます。彼女は読書、執筆、コーディング、コーヒーが好きです。現在、彼女はチュートリアル、ハウツー ガイド、意見記事などを作成して、学習し、開発者コミュニティと知識を共有することに取り組んでいます。 Bala は、魅力的なリソースの概要やコーディング チュートリアルも作成しています。

タイムスタンプ:

より多くの KDナゲット