我正在用Python编写一些几乎可以工作的代码,但是有一件事我无法理解。在
我需要遍历两个列表。我想循环执行,直到第一个列表完成;而第二个列表应该重复,直到第一个列表完成。在
我想输入数据库列表和流列表。然后我希望代码输出9行代码,替换它有“+stream+”和“+item+”的位置。item部分工作正常,但我不知道如何在遍历数据库列表时输出流列表。我想让水流循环,然后重复。所以它会从1a开始,然后达到3c,然后在1a处重新开始,我希望这个过程一直持续到列表中的最后一个数据库。在
databases=input("Enter databases: ")
streams="1a 2a 3a 1b 2b 3b 1c 2c 3c"
stream="1a"
db_list = databases.split()
streams_list= streams.split()
for item in db_list:
print("unlink $ORACLE_BASE/admin/" + item + "/backup")
print("unlink $ORACLE_BASE/admin/" + item + "/dpdump")
print("unlink $ORACLE_BASE/admin/" + item + "/exp")
print("mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM" + stream + "/" + item + "/backup")
print("mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM" + stream + "/" + item + "/dpdump")
print("mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM" + stream + "/" + item + "/exp")
print("ln -s $ORACLE_BASE/acfsmounts/global/STREAM" + stream + "/" + item + "/backup $ORACLE_BASE/admin/" + item + "/backup")
print("ln -s $ORACLE_BASE/acfsmounts/global/STREAM" + stream + "/" + item + "/dpdump $ORACLE_BASE/admin/" + item + "/dpdump")
print("ln -s $ORACLE_BASE/acfsmounts/global/STREAM" + stream + "/" + item + "/exp $ORACLE_BASE/admin/" + item + "/exp")
输出如下:
^{pr2}$我的输出每次都有STREAM1a,但我希望它在1a、2a、3a、1b、2b、3b、1c、2c和3c的模式中循环。如前所述,如果我有超过9个数据库,那么它将再次从1a开始。我怎样才能做到这一点?在
我的代码中唯一没有按我想要的方式工作的部分是它显示“+stream+”。在
您应该使用itertools.cycle。这将允许您以无休止的重复循环获取列表中的元素。在循环开始处添加以下代码:
或者正如@HughBothwell建议的那样,您可以使用zip并将其包含在
^{pr2}$for
循环的定义中:任何一种方式都将在循环的每次迭代中为您提供下一个流。如果dbs多于streams,那么它将重复。在
诀窍是使用来自
itertools
的迭代器,称为cycle
bonus-使用docopt解析命令行参数
小好处:让您可以调用脚本并从命令行方便地输入paremeters
安装
^{pr2}$docopt
包(仅一次)编写脚本的修改版本数据库:
打印输出使用字符串:
显示一些帮助字符串:
并称之为真正的用途:
相关问题 更多 >
编程相关推荐