Python:将sys.argv与字符串进行比较

时间:2012-07-20 16:08:38

标签: python

这看起来应该很简单,但我遇到了一些严重的问题。我想要做的就是查看用户输入是否与2个字母的表达式匹配。我想我最大的问题是我对re库不是很熟悉,而且文档对我来说并没有太大的帮助。

这是我到目前为止所尝试的:

尝试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。所以最后一个说其他的:exit()总是被击中(因为我正在测试第一个if)。菜鸟错误

3 个答案:

答案 0 :(得分:6)

在比较之前,将字符串转换为test to smallcase,你应该没问题:

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

更值得注意的是,正则表达式不适合这项工作。

答案 1 :(得分:1)

你的re.match是落后的。模式首先出现。尝试:

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

答案 2 :(得分: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文件的来源。运行deactivateactivate定义的别名)退出。确保在环境中使用python(即#!/usr/bin/env python)而不是硬编码特定的python实例。