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())

但是,这会导致“无”,如果我再次执行 hosts.append(importlines()),我会遇到无,无。所以它似乎是在列表中附加一个不包含任何内容的元素。我试过执行 hosts.append(print(importlines())) 但是我有同样的问题。

如您所知,我是您可能描述为偶然的系统管理员,并且在这方面没有经验。我也知道这将创建一个大列表的问题,在我的脑海中,我相信我需要一个包含每一行列表的列表。我在这里不正常吗?

谢谢,

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() 语句不返回任何内容。尝试这样的事情:

定义导入线():
    toRet = []
    mf = open('C:\\scripts\\nagios\\filename.txt','r')
    行 = mf.read().split()
    对于行中的行:
        toRet.append(行[0])
    返回Ret
于 2012-12-05T13:16:37.853 回答