ホーム>source

アプリケーションと彼のデータソースに関する情報を表示しようとしています。 このタイプの出力を実際の行から取得する方法を教えてください。

これは私の生データです。サブプロセスでbashから取得した行があり、サブプロセスコマンドはfind、grep、cutの組み合わせであるため、出力を変更できます。

<前>ウィズウィズ

そして私の望ましい出力は:

<前>ウィズウィズ

編集 この出力を取得するためにリストを確認する方法はありますか? googleitのコンセプトは?始め方がわからない

全てに感謝

Company1/application1 datasource=ds1 Company1/application1 datasource=ds2 Company1/application1 datasource=ds3 Company1/application2 datasource=ds1 Company1/application2 datasource=ds2 Company2/application1 datasource=ds1 Company2/application1 datasource=ds2 Company2/application2 datasource=ds1 Company2/application2 datasource=ds2 Company2/application2 datasource=ds3
あなたの答え
  • 解決した方法 # 1

    collections.defaultdictは、その場で欠損値を作成します。あなたのユースケースにぴったりだと思います。

    あなたのデータセットは口述 の口述リストs、私は defaultdict(lambda: defaultdict(list)) を使いました 。残りは簡単です

    <前>ウィズウィズ

  • 解決した方法 # 2

    これはテキストファイルですか、それとも出力をテキストファイルに保存するオプションがありますか?ファイルを開くことができる場合は、ファイルの行を繰り返し処理してから、すべての行を分割する文字列として扱います。

    疑似コード:

    <前>ウィズウィズ

    その後、これらを次のような辞書に入れることができます:

    <前>ウィズウィズ

    残りのフローに応じて、pretty printなどを使用して、説明したようなコードを出力します。

  • 解決した方法 # 3

    ここでの鍵は、ツリーを使用することです。 あなたはこのようなクラスでそれを非常に簡単に行うことができます:

    <前>ウィズウィズ

    ここで、各ノードは、深さ変数と、そのすべての子を含む辞書を持つオブジェクトです

    最初に、スペースのみで区切られたきれいな行のリストとしてデータを表す必要があります

    <前>ウィズウィズ

    さて、少し再帰を使用すると、yonはデータを簡単にソートできます。

    <前>ウィズウィズ

    出力:

    <前>ウィズウィズ

    この方法の利点は、必要な数のパラメーターで使用できることです。ここには3つ(会社、アプリケーション、データソース)がありますが、もっと多く持つことができます...

    私のコードがあなたを助けることを願っています!

    from collections import defaultdict s = '''Company1/application1 datasource=ds1 Company1/application1 datasource=ds2 Company1/application1 datasource=ds3 Company1/application2 datasource=ds1 Company1/application2 datasource=ds2 Company2/application1 datasource=ds1 Company2/application1 datasource=ds2 Company2/application2 datasource=ds1 Company2/application2 datasource=ds2 Company2/application2 datasource=ds3''' companies = defaultdict(lambda: defaultdict(list)) for line in s.splitlines(): co_app, ds = line.split(' ') co, app = co_app.split('/') companies[co][app].append(ds) for co, applications in companies.items(): print(co) for app, datasets in applications.items(): print(f'\t{app}') for ds in datasets: print(f'\t\t{ds}')

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ typescript - クラス内のプライベートメソッドに確実にアクセスする方法