我需要使用某些服务器的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()))但是我有同样的问题。
正如你所知道的那样,你可能形容为偶然的系统管理员并且没有经验。我也知道这会创建一个大型列表的问题,在我看来我相信我需要一个包含每行列表的列表。我不在这里吗?
谢谢,
答案 0 :(得分: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
。
答案 1 :(得分:-1)
你必须从函数中返回一些东西。 print()语句不返回任何内容。 尝试这样的事情:
def importlines(): toRet = [] mf = open('C:\\scripts\\nagios\\filename.txt','r') lines = mf.read().split() for line in lines: toRet.append(line[0]) return toRet