python CSV出力（に使用するデータの読み込み）について


初めて質問させていただきます。  
pythonで「netsh wlan show interface」の出力結果を  
下記条件でCSVへ変換したいのですが、まったくもってできない状態です。  
どなたか、ご教示願います。

条件  
①システムに 1 インターフェイスがあります: を削除  
② ホストされたネットワークの状態: 利用不可 を削除  
③名前からプロファイル名までをCSV形式へ変換し、sample.csvとして保存

[code]

    システムに 1 インターフェイスがあります:
    
        名前                   : Wi-Fi
        説明                   : Qualcomm Atheros QCA61x4A Wireless Network Adapter
        GUID                   : 000000000000000000
        物理アドレス           : xx:xx:xx:xx:xx:xx
        状態                   : 接続されました
        BSSID                  : xx:xx:xx:xx:xx:xx
        ネットワークの種類     : インフラストラクチャ
        無線の種類             : 802.11n
        認証                   : WPA2-パーソナル
        暗号                   : CCMP
        接続モード             : 自動接続
        チャネル               : 6
        受信速度 (Mbps)        : 144.4
        送信速度 (Mbps)        : 144.4
        シグナル               : 94%
        プロファイル           : sample-wifi
    
        ホストされたネットワークの状態: 利用不可
    
[/code]

まず、条件①を満たすために"システムに 1 インターフェイスがあります:"をreplaceで空白へ  
置換（削除）を行おうとしましたが、うまくいきません。。。

色々、調べているのですが、時間がなく切羽詰まっている状況です。

[code]

    del_word_1 = 'システムに 1 インターフェイスがあります:'
    with open('tmp.txt', 'r') as f:
    
        for line in f:
            line = f.readline().rstrip('\r\n')
            if 'システムに 1 インターフェイスがあります:' == del_word_1:
                line.replace("システムに 1 インターフェイスがあります:", "").strip()
                print(line)
    
[/code]




pandas のデータフレームに変換する方法も考えられます。また、property と value を列ではなく行単位で構成するので
`pandas.DataFrame.T`(transpose) を使います。

[code]

    import pandas as pd
    from datetime import datetime
    
    # to dataframe(transpose row and column)
    df = (
      pd.read_table('tmp.txt', encoding='cp932')
        .iloc[:-1, 0]
        .str.extract(r'^\s+(.+?)\s*:\s*(.+?)\s*$')
        .T
    )
    
    # insert current time
    df.insert(0, 'now', ('日時', datetime.now().strftime("%Y/%m/%d %H:%M:%S")))
    
    # save with csv format
    df.to_csv('sample.csv', index=False, header=None, encoding='cp932')
    # df.iloc[1:,:].to_csv('sample.csv', mode='a', index=False, header=None, encoding='cp932')
    
[/code]

**property-value table**  
`df.to_markdown(index=False))`

日時 | 名前 | 説明 | GUID | 物理アドレス | 状態 | BSSID | ネットワークの種類 | 無線の種類 | 認証 | 暗号 |
接続モード | チャネル | 受信速度 (Mbps) | 送信速度 (Mbps) | シグナル | プロファイル  
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---  
2021/08/12 13:47:49 | Wi-Fi | Qualcomm Atheros QCA61x4A Wireless Network
Adapter | 000000000000000000 | xx:xx:xx:xx:xx:xx | 接続されました | xx:xx:xx:xx:xx:xx
| インフラストラクチャ | 802.11n | WPA2-パーソナル | CCMP | 自動接続 | 6 | 144.4 | 144.4 | 94% |
sample-wifi




まずはファイルの内容をそのまま読み込んで出力することからやってみてはどうでしょうか？  
openしたあとのfをfor inでループ処理すれば、readlineする必要はないのでこんな感じです。

[code]

    with open('tmp.txt', 'r') as f:
    for line in f:
        line = line.rstrip('\r\n')
        print(line)
    
[/code]

これで、1行ずつ読んだ行がそのまま出力されます。

次に、①の「システムに～」は削除するところですが、これは読みこんだ行を無視すれば最終的な出力からは削除されることになりますよね。

[code]

    with open('tmp.txt', 'r') as f:
    for line in f:
        line = line.rstrip('\r\n')
        if 'システムに 1 インターフェイスがあります:' in line:
            continue
        print(line)
    
[/code]

lineに「システムに 1
インターフェイスがあります:」という文字列が含まれていたら次の行へやり直してます。その行は出力されません。同じようにすれば②も読み飛ばせますよね。

最後にCSV出力のところですが、最終的な求める出力結果が質問からは分からないので想像ですが、こういう結果が求められているとして、

[code]

    名前,説明,GUID,......
    Wi-Fi,Qualcomm Atheros QCA61x4A Wireless Network Adapter,000000000000000000,....
    
[/code]

これはもとのファイルと行と列が入れ替わっているので1行ずつ読みながら処理することはできません。全部読み込んでから最後に出力します。

ここまでヒントを出したのであとは、もう少し分からないところを整理してみて質問してみたら良いと思います。

「CSVをどうやって作るのか」「どうやって項目を切り出すのか」「ファイルにどうやって保存するのか」などいろんなつまづきポイントがあるなかで質問者さんがどこまでできて、どこが分からないのかを整理して質問してみてください。

