Python列表

时间:2017-04-20 07:00:26

标签: python list argparse

我没有言辞感谢你们所有人提出这么好的建议。现在一切都变得有意义了。我为我糟糕的变量命名道歉。这只是因为我想快速学习,当我用自己的增强功能编写最终脚本时,我不会执行这样的练习。

我希望通过将我们隔离的值(ip,端口和名称)传递给模板来进一步推进。虽然我感觉很亲近,但我试过但是无法把它弄好。我想要构建的文本看起来像这样。 (

          Host Address:<IP>:PORT:<1>
          mode tcp
          bind <IP>:<PORT> name <NAME>

我在rahul提供的工作脚本中尝试了这个。(我已经编辑了我的原始代码,遵守了stackexchange的规定。也请帮助一次。非常感谢提前。

#!/usr/bin/python
import argparse
import re
import string

p = argparse.ArgumentParser()
p.add_argument("input", help="input the data in format ip:port:name", nargs='*')  
args = p.parse_args()
kkk_list = args.input 

def func_three(help):
    for i in help:
        print(i)

for kkk in kkk_list:
    bb = re.split(":|,", kkk) 
    XXX=func_three(bb)
for n in XXX:
    ip, port, name = n
    template ="""HOST Address:{0}:PORT:{1}
              mode tcp
              bind {0}:{1} name {2}"""
       sh = template.format(ip,port,name)
       print sh
orignial post: -

初学者。我写了下面的代码,它不会让我在任何地方。

#!/usr/bin/python
import argparse
import re
import string

p = argparse.ArgumentParser()
p.add_argument("INPUT")  
args = p.parse_args()
KKK= args.INPUT
bb=re.split(":|,", KKK)

def func_three(help):
    for i in help:
        #print help
        return help

#func_three(bb[0:3])
YY = var1, var2, var3 = func_three(bb[0:3])
print YY

运行此脚本的方法应该是“script.py:”。即:script.py 192.168.1.10:80:string 172.25.16.2:100:string

正如您所看到的,如果一个参数被传递,我没有任何问题。但是当有更多的论据时,我无法确定如何锻炼正则表达式并通过循环完成。

所以回顾一下,这就是我希望输出看起来更进一步的方式。

192.168.1.10
80
name1

172.25.16.2
100
name2

如果有更好的其他方法可以实现这一目标,请随时提出建议。

4 个答案:

答案 0 :(得分:1)

我会说你正在做的事情可以更简单地完成。如果要在冒号出现时拆分输入,可以使用:

<html>
   <head>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.5.4/react.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.5.4/react-dom.min.js"></script>
      <script src="http://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>

   </head>
   <body> 

      <div id="div1"></div>

         <script type="text/babel">

             function myApp(){
                return <h1>Hi</h1>;
             } 

             var elem = (
                <div>
	               <myApp /> 
                </div>
             );

             ReactDOM.render(elem, document.getElementById('div1'));

         </script>
      </div>
   </body>
</html>

答案 1 :(得分:0)

除了错误的变量名称,如果你想使用argparse(我认为这是一个好习惯,即使它最初有点复杂)你应该使用nargs='+'选项:

#!/usr/bin/env python

import argparse
import re
import string

p = argparse.ArgumentParser()
p.add_argument("INPUT", nargs='+')  
args = p.parse_args()
KKK= args.INPUT

def func_three(help):
    for i in help:
        #print help
        return help

for kkk in KKK:
    bb=re.split(":|,", kkk)
    #func_three(bb[0:3])
    YY = var1, var2, var3 = func_three(bb[0:3])
    print YY

答案 2 :(得分:0)

如果您查看the documentation for argparse,您会注意到nargs参数可以传递给add_argument,这可以让您分组多个输入

例如:

p.add_argument('INPUT', nargs='+')

会使它至少有一个参数,但所有参数都会被收集到一个列表中。

然后你可以像这样查看每个输入:

args = p.parse_args()
for address in args.INPUT:
    ip, port = address.split(':')

答案 3 :(得分:0)

请根据上下文命名您的变量。您需要使用nargs=*来接受多个参数。我在下面添加了更新的代码,可以根据需要进行打印。

#!/usr/bin/python
import argparse
import re
import string

p = argparse.ArgumentParser()
p.add_argument("input", help="input the data in format ip:port:name", nargs='*')  
args = p.parse_args()
kkk_list = args.input # ['192.168.1.10:80:name1', '172.25.16.2:100:name3']

def func_three(help):
    for i in help:
        print(i)

for kkk in kkk_list:
    bb = re.split(":|,", kkk) 
    func_three(bb)
    print('\n')

# This prints
# 192.168.1.10
# 80
# name1


# 172.25.16.2
# 100
# name3
新要求的

更新代码

#!/usr/bin/python
import argparse
import re
import string

p = argparse.ArgumentParser()
p.add_argument("input", help="input the data in format ip:port:name", nargs='*')  
args = p.parse_args()
kkk_list = args.input # ['192.168.1.10:80:name1', '172.25.16.2:100:name3']


def printInFormat(ip, port, name):
    formattedText = '''HOST Address:{ip}:PORT:{port} 
                        mode tcp 
                        bind {ip}:{port} name {name}'''.format(ip=ip, 
                                                                port=port, 
                                                                name=name)
    textWithoutExtraWhitespaces =  '\n'.join([line.strip() for line in formattedText.splitlines()])
    # you can break above thing
    # text = ""
    # for line in formattedText.splitlines():
    #       text += line.strip()
    #       text += "\n" 

    print(formattedText)


for kkk in kkk_list:
    ip, port, name = re.split(":|,", kkk)

    printInFormat(ip, port, name)


# HOST Address:192.168.1.10:PORT:80
# mode tcp
# bind 192.168.1.10:80 name name1
# HOST Address:172.25.16.2:PORT:100
# mode tcp
# bind 172.25.16.2:100 name name3