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

2024-04-19 09:28:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用某些服务器的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())

但是,如果我执行主机.append(importlines())我又一次遇到了无,无。所以它似乎在列表中添加了一个不包含任何内容的元素。我试过执行死刑主机.append(print(importlines()))但是我有同样的问题。你知道吗

正如你所说,我是一个意外的系统管理员,在这方面没有任何经验。我也意识到这个问题,这将创建一个大的列表,在我的头脑中,我相信我需要一个包含每行列表的列表。我是不是有点不对劲了?你知道吗

谢谢你


Tags: theto数据info元素列表readdata
2条回答

你必须从函数中返回一些东西。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

您正在拆分整个文件,而不是每行。而且,您的函数只打印,实际上并不使用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。你知道吗

相关问题 更多 >