我正在从给定的文本文件中读取地址,网络掩码,网关和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
答案 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]
对var2
,var3
和var4
的相似注释。因此您的代码将是:
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个看起来不好的替换语句