将文件数据从函数导入列表

时间:2012-12-05 13:12:36

标签: python file list function

我需要使用某些服务器的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()))但是我有同样的问题。

正如你所知道的那样,你可能形容为偶然的系统管理员并且没有经验。我也知道这会创建一个大型列表的问题,在我看来我相信我需要一个包含每行列表的列表。我不在这里吗?

谢谢,

2 个答案:

答案 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