从命令行调用我的python脚本时,传入一个输入字符串(参数1)和一个空字符串(参数2),这将导致我的输出解析我的模块中的输入字符串
C:\Windows\system32>set project_name=
C:\Windows\system32>echo "%project_name%" " "
C:\Windows\system32>"C:\Python27\python" "C:\IR125422\GetProject1.py" "#p=/Product Delivery/Product Delivery.pj#s=Team P rojects/Team Projects.pj#s=Platform Pack/Platform Pack.pj#s=Runtime/Runtime.pj" project_name
Traceback (most recent call last): File "C:\IR125422\GetProject1.py", line 5, in <module>
startpos = rindex("/",stext) NameError: name 'rindex' is not defined
我的python程序将字符串盯着#34;#p&#34;并找到最后一个子字符串&#34; /&#34;在字符串中,然后将该字符串的剩余部分复制到字符串project_name中,从最后一个&#34; /&#34;到字符串的末尾。所以在程序运行之后,project_mane应该包含&#34; runtime.pj&#34;
这是程序
import os, sys
stext = sys.argv[1]
rtext = sys.argv[2]
startpos = rindex("/",stext)
rtext = stext(startpos+1,len(rtext))
print "Extracting project"
print rtext;
然而,似乎无法识别字符串方法rindex。我是否需要在我的&#34;导入&#34;中添加模块?部分?我认为这不是python中字符串处理所必需的,因为它是python
的内在函数答案 0 :(得分:1)
rindex
不能作为全局函数使用,而是作为str
类的方法。
用法为str.index(self, sub[, start[, end]])
。
所以如果你替换这行:
startpos = rindex("/",stext)
使用以下两种方法之一:
startpos = str.rindex(stext, "/")
startpos = stext.rindex("/")
有问题的行应该有效。
但请注意,以下行还包含错误:
rtext = stext(startpos+1,len(rtext))
就像目前一样,你将调用stext就好像它是一个函数,而不是将其索引为可迭代的。 请尝试以下方法:
rtext = stext[startpos+1:]
这将导致原始字符串的“slice”,从startpos + 1开始,到字符串结尾处结束。 因此,您的完整代码无需进一步修改即可:
import os, sys
stext = sys.argv[1]
rtext = sys.argv[2]
startpos = stext.rindex("/") # This line changed
rtext = stext[startpos+1:] # This line changed
print "Extracting project"
print rtext;
给出输出:
Extracting project
Runtime.pj
正如Two-Bit Alchemist所建议的,您的代码也可以稍微清理一下。
对rtext
的初始分配没有任何作用,可以省略。
可以通过在字符串中添加换行符并使用format
来组合print语句,或者如果您想以某种方式捕获并使用DOS或PowerShell中的输出,您甚至可能想要省略第一个print语句。
这也可能是通过添加括号使print
语句对Python3友好的好时机。
此外,Two-Bit Alchemist建议更直接地计算rtext:
rtext = stext.split('/')[-1]
将字符串拆分为每个'/'的列表,然后获取最后一个元素,对应于最后'/'之后的字符串部分,就像当前解决方案一样。
最后,os
导入未使用,第二个print语句后面的分号是多余的,因此两者都可以省略。
清理后的代码为:
import sys
stext = sys.argv[1]
rtext = stext.split('/')[-1]
print(rtext)
甚至更紧凑:
import sys
print(sys.argv[1].split('/')[-1])