2012-07-20 88 views
0

这似乎应该是如此简单,但我有一些严重的问题。我想要做的就是看用户输入是否匹配2个字母的表达式。我想我最大的问题是,我对re库不是很熟悉,文档也没有太多帮助。Python:比较sys.argv与字符串

这是我到目前为止已经试过:

尝试1

if re.match(sys.argv[3], "GL", re.I): 
    input_file_path = "V:\\test" 

尝试2

if re.ignorecase(sys.argv[3], "GL"): 
    input_file_path = "V:\\test" 

尝试3

if sys.argv[3] == "GL": 
    input_file_path = "V:\\test" 

我调用程序的方式运行:filename.py tester test GL “测试仪”和“测试”还没有真正使用。

编辑:我发现我的主要问题。我正在调用一堆if语句而不是elif。所以最后一个说else:exit()总是被击中(因为我正在测试第一个if)。新手的错误

+2

你记得说sys.argv [0]是脚本的名字吗? – Trevor 2012-07-20 16:10:28

+1

1)'domain'是否等于'sys.argv [3]'?2)如果字符串应该完全匹配“GL”,不要打扰使用're'模块,这是更一般的比较。只要使用简单的字符串比较,如第3次尝试。 – chepner 2012-07-20 16:12:09

+0

@Trevor是的,当我打印sys.argv [3]它打印出GL。是的,域是平等的(我编辑该部分) – LiverpoolFTW 2012-07-20 16:13:34

回答

7

只是转换字符串测试比较之前为小写,你应该罚款:

if sys.argv[3].lower() == "gl": 
    input_file_path = "V:\\test" 

更值得注意的是,正则表达式是不是这个工作的工具。

+0

如果这个工作,那么我会认为'尝试1'会工作。 (虽然这当然更好)。 – mgilson 2012-07-20 16:12:28

+0

@mgilson:他有混合参数的顺序,模式第一,待匹配的字符串第二。 – 2012-07-20 16:14:23

+0

@TimPietzcker我知道使用re.match(与re.search)进行锚定(这个答案也是在字符串的开始[和结尾]锚定比较)。我没有想到参数的顺序,但你是正确的。谢谢。 – mgilson 2012-07-20 16:16:30

0

显然第三个参数不是'GL'。 print sys.argv,你会看到。我的猜测是,你在索引中排名第一。

向我们展示您用来运行脚本的命令行。


打印sys.argv中[3]打印准确GL - LiverpoolFTW


然后bug是别处。如果您刚刚打印sys.argv[3].lower() == "gl",以及刚刚打印input_file_path,则会看到预期值。你真正需要的是一个调试器。 pdb是内置标准,但我强烈建议pudb

为了快速设置,请将这些粘贴到终端中。 virtualenv是保持项目依赖关系独立的行业标准。

cd ~ 
wget https://raw.github.com/pypa/virtualenv/1.6.3/virtualenv.py 
python virtualenv.py mypy 
source mypy/bin/activate 
pip install pudb 

来源,activate文件,只要你想进入环境。运行deactivate(由activate定义的别名)脱身。确保在环境中使用python(即#!/usr/bin/env python),而不是对特定的python实例进行硬编码。

+1

打印sys.argv [3]打印完全GL – LiverpoolFTW 2012-07-20 16:19:26

2

重新匹配是落后的。模式首先。试试:

if re.match('GL', sys.argv[3], re.I): 
    input_file_path = "V:\\test"