[英]Python 2.7 - NameError: name 'servervpn' is not defined
我正在尝试使用以下命令将文件中的一行文本存储到一个变量中:
#!/usr/bin/python
fo=open("/home/asb/crt/id2tcpvpncom443.ovpn")
for line in fo:
if line.find('remote')==0:
vpn=line.split(" ")
if len(vpn) > 1:
servervpn=vpn[1] + ":" + vpn[2]
hostvpn=vpn[1]
portvpn=vpn[2]
print 'server: '+servervpn
/home/asb/crt/id2tcpvpncom443.ovpn
看起来像这样:
client
dev tun
proto tcp
;remote shellbump.com 887
remote 188.166.179.165 443
#remote 8gag.com 975
resolv-retry infinite
nobind
tun-mtu 1500
我希望结果是:
server: 188.166.179.165:443
我应该怎么做?
编辑:
实际上, id2tcpvpncom443.ovpn
比这更长,这是我要读取的完整文件: http : //pastebin.com/PNphqXtt
我更pythonic的方式:
with open('your_file', 'r') as fp:
# this is the right way to open a file
for line in fp:
if line.startswith('remote ') and line.count(' ') >= 3:
_, ip, port = line.split() # split to every word seperator
print ip, port
这是对您的代码稍作修改以使其起作用的代码
#!/usr/bin/python
fo=open("/home/asb/crt/id2tcpvpncom443.ovpn")
for line in fo:
if line.strip().startswith('remote'): # startswith is a bit more direct here
vpn=line.split() # split without argument splits at any whitespace
if len(vpn) > 2: # not necessary but defensive -> good
servervpn=vpn[1]
hostvpn=vpn[1]
portvpn=vpn[2]
# if you like you can short-circuit here:
break
print 'server: ' + ':'.join([servervpn, portvpn])
只是另一种正则表达式解决方案。
import re
with open('your_file', 'r') as fp:
a = fp.read()
m = re.search(r'^remote\s+([\d.]+)\s+(\d+)', a, re.MULTILINE)
print("server: {}:{}".format(m.group(1), m.group(2) ))
您正在分割一个空格字符; 如果分隔符是两个空格或一个制表符,那么事情将无法按预期进行。 相反,请分割(通用)空白:
vpn=line.split()
您可以尝试如下操作:
import re
with open("/home/asb/crt/id2tcpvpncom443.ovpn", 'r') as f:
line = re.findall(r'remote\s*(\d{3}\.\d{3}\.\d{3}\.\d{3}\s+\d{3})', f.read())[0]
print ('server: ' + ':'.join(line.split()))
输出:
server: 188.166.179.165:443
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.