1

一部のサーバーの IP とホスト名を使用して繰り返し構成ファイルを作成する必要があります。このデータは、含まれているモック データと同様の大きなリストに含まれています。

192.168.0.1 -   data    info    hosta
192.168.0.2 -   data    info    hostb
192.168.0.3 -   data    info    hostc
192.168.0.4 -   data    info    hostb

このデータには、次の項目など、私が望まない任意の情報が含まれています。

-   data    info    '

分割されたデータをリストに読み込むことができるという考えがありました。次に、リスト内の各番号付き要素のみを表示するように指定してリストをループし、残すだけにすることができます。

192.168.0.1
192.168.0.2
...

これは、IP アドレスのみを含む新しいリストに配置されます。

ファイルをリストに読み込む関数を作成しました

def importlines():
    mf = open('C:\\scripts\\nagios\\filename.txt','r')
    lines = mf.read().split()
    print(lines)
mf.close()

#the data is read in correctly
#I then attempted to create a blank list
hosts = []

#then append the output from the function call to the list
hosts.append(importlines())

ただし、これは「None」になります。もう一度 hosts.append(importlines()) を実行すると、None,None が表示されます。そのため、何も含まない要素をリストに追加しているようです。hosts.append(print(importlines())) を実行しようとしましたが、同じ問題があります。

お分かりのように、私は偶然のシステム管理者であり、このような経験はありません。また、これにより1つの大きなリストが作成されるという問題も認識しています。頭の中で、各行のリストを含むリストが必要だと思います。私はここで的外れですか?

ありがとう、

4

2 に答える 2

1

各行ではなく、ファイル全体を分割しています。さらに、関数はを出力returnするだけで、呼び出し元に結果を返すために実際には使用しません。

def importlines():
    with open('C:/scripts/nagios/filename.txt') as mf:
        return [l.split()[0] for l in mf]

IP アドレスのリストのみを返します。結果を次の場所に直接割り当てることができますhosts

hosts = importlines()

あなた自身のコードは に何も返しませんでしimportlines()た。Python 関数のデフォルトの戻り値は ですNone

于 2012-12-05T13:14:40.830 に答える
-1

関数から何かを返す必要があります。print() ステートメントは何も返しません。次のようなことを試してください:

def importlines():
    toRet = []
    mf = open('C:\\scripts\\nagios\\filename.txt','r')
    行 = mf.read().split()
    行の行の場合:
        toRet.append(行[0])
    戻ります
于 2012-12-05T13:16:37.853 に答える