

以下フォーマットのテキストファイルから設定項目と設定をバラバラに取得するプログラムを作成中です。

<フォーマット>

[code]

    test login_id: userid 
    authority: root     folder: root123
    login password: 1234***
    
[/code]

<フォーマットの決まり>  
・設定項目と設定の間は:と半角スペースがある。  
例  
設定項目  
folder:  
設定root123

・設定項目は１つの言葉か複数の言葉で記載。設定内容は１つの言葉、スペースもない。  
例  
設定項目（login password:）、設定（1234****)

・設定項目と設定のセットは１行に複数のセットがある場合がある。ただし、各セットのスペース数については決まりがない（１スペースだったり２スペースだったり）  
例  
authority: root folder: root123

### 実現したいこと

Pythonで辞書型としてそれぞれの値を取得したい。

[code]

    data = [{"test login_id": userid}, {"authority": "root"}, {"folder":"root123"},{"login password":"1234***"}]
    
[/code]

まだ、コードを書いていない状況での質問で恐縮ですが、私の実力では今現時点で何も思い浮かばず、先に質問させていただきました。  
もし何かアイデアございましたら、ご教示いただけると大変たすかります。  
どうぞよろしくお願いいたします。


CC BY-SA 4.0
2023-01-22T06:03:04.790
93502
2023-01-25T02:19:41.460
2023-01-25T02:18:45.723
3060
51133
question
python 正規表現
特定フォーマットのデータから正規表現で目的の値を取得したい


**format_data.txt**

[code]

    test login_id: userid
    authority: root folder: root123
    login password: 1234***
    
[/code]

**Python script**

[code]

    import re
    
    with open('format_data.txt', 'r') as f:
        data = [{k: v} for k, v in re.findall(r'\s*(.+?):\s+([^\s]+)', f.read())]
    
    print(data)
    
    # [{'test login_id': 'userid'}, {'authority': 'root'}, {'folder': 'root123'}, {'login password': '1234***'}]
    
[/code]


CC BY-SA 4.0
2023-01-22T06:37:50.237
93504
2023-01-22T08:27:19.420
2023-01-22T08:27:19.420
47127
47127
93502
answer


最終的に以下のような形になりました。色々とありがとうございました。

[code]

    with open("system.txt") as f:
    new_date = re.sub(':\s{2}', ': null', new_date1)
    
    data = [{k: v} for k, v in re.findall(r'\s*(.+?)[:?]\s+([^\s]+)', new_date)]
    
    print(data)
    
[/code]

sytem.txt

[code]

    test login_id: userid
    authority: root folder: root123
    login password: 1234***
    make directory? yes source code:
    
[/code]


CC BY-SA 4.0
2023-01-24T23:57:19.763
93552
2023-01-25T02:19:41.460
2023-01-25T02:19:41.460
3060
51133
93502
answer