如何使用python从文本文件中获取特定值

时间:2018-09-06 13:21:11

标签: python

我正在从给定的文本文件中读取地址,网络掩码,网关和dnsname服务器的值,并将它们分别存储到var1,var2,var3和var4中。在我的代码中,我正在获取变量而不是它们的值。如何从给定的文本文件下面提取地址值。我是python文件编辑的新手。感谢所有帮助。我已经阅读了此类文本编辑问题和解答,但没有帮助就我而言。

def read_values():
    with open('text.txt', 'r') as f:
        lines = f.read().split()
        print('List:',lines)
        for i, l in enumerate(lines):
            if l.startswith('address'):
                var1 = l
                print('address:', var1)
            if l.startswith('netmask'):
                var2 = l
                print('netmask:', var2)
            if l.startswith('gateway'):
                var3 = l
                print('gateway:', var3)
            if l.startswith('dns'):
                var4 = l
                print('dns:', var4)

read_values()

这是text.txt文件:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
   address 125.222.2222
   netmask 455.225.222.22
   gateway 236.256.222.22
   dns-nameserver 123.256.223.22

4 个答案:

答案 0 :(得分:0)

这应该有帮助。

with open(filename, 'r') as f:
    for line in f:                        #Iterate each line
        val = line.strip()                #Strip leading and trailing space. 
        if val.startswith('address'):     #Check for value
            var1 = val
            print('address:', var1)
        if val.startswith('netmask'):
            var2 = val
            print('netmask:', var2)
        if val.startswith('gateway'):
            var3 = val
            print('gateway:', var3)
        if val.startswith('dns'):
            var4 = val
            print('dns:', var4)

输出:

('address:', 'address 125.222.2222')
('netmask:', 'netmask 455.225.222.22')
('gateway:', 'gateway 236.256.222.22')
('dns:', 'dns-nameserver 123.256.223.22')

答案 1 :(得分:0)

您可以将以下dict构造函数与列表理解一起使用:

dict(l.strip().rsplit(maxsplit=1) for l in open('text.txt') if any(l.strip().startswith(i) for i in ('address', 'netmask', 'gateway', 'dns-nameserver', 'iface eth0 inet')))

这将返回:

{'address': '125.222.2222', 'netmask': '455.225.222.22', 'gateway': '236.256.222.22', 'dns-nameserver': '123.256.223.22'}

答案 2 :(得分:0)

您的代码存在问题,例如

var1 = l

如果l.startswith('address'),则var1成为“地址”。您需要紧随其后的列表元素:

var1 = lines[i + 1]

var2var3var4的相似注释。因此您的代码将是:

def read_values():
    with open('text.txt', 'r') as f:
        lines = f.read().split()
        print('List:',lines)
        for i, l in enumerate(lines):
            if l.startswith('address'):
                var1 = lines[i + 1]  # <===
                print('address:', var1)
            if l.startswith('netmask'):
                var2 = lines[i + 1]  # <===
                print('netmask:', var2)
            if l.startswith('gateway'):
                var3 = lines[i + 1]  # <===
                print('gateway:', var3)
            if l.startswith('dns'):
                var4 = lines[i + 1]  # <===
                print('dns:', var4)

read_values()

答案 3 :(得分:0)

为什么不只在打印声明中替换它

例如

print('address:', var1.replace("address", "").strip) \\strip to get rid of new whitespace you created with the replace

这将保留,而'...如果您想输掉那些最好的赌注,则可以是一个正则表达式,或者另外2个看起来不好的替换语句