繁体   English   中英

Python 2.7-NameError:名称'servervpn'未定义

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM