【发布时间】:2014-06-26 13:16:39
【问题描述】:
我正在用 Python 编写一些几乎可以工作的代码,但有一件事我无法弄清楚。
我需要遍历 2 个列表。我想循环直到第一个列表完成;而第二个列表应该不断重复,直到第一个列表完成。
我想输入一个数据库列表和一个流列表。然后我希望代码通过替换“+流+”和“+项目+”的位置来输出9行。 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")
这是输出:
Enter databases: database1 database2 database3
unlink $ORACLE_BASE/admin/database1/backup
unlink $ORACLE_BASE/admin/database1/dpdump
unlink $ORACLE_BASE/admin/database1/exp
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database1/backup
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database1/dpdump
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database1/exp
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database1/backup $ORACLE_BASE/admin/database1/backup
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database1/dpdump $ORACLE_BASE/admin/database1/dpdump
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database1/exp $ORACLE_BASE/admin/database1/exp
unlink $ORACLE_BASE/admin/database2/backup
unlink $ORACLE_BASE/admin/database2/dpdump
unlink $ORACLE_BASE/admin/database2/exp
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database2/backup
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database2/dpdump
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database2/exp
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database2/backup $ORACLE_BASE/admin/database2/backup
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database2/dpdump $ORACLE_BASE/admin/database2/dpdump
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database2/exp $ORACLE_BASE/admin/database2/exp
unlink $ORACLE_BASE/admin/database3/backup
unlink $ORACLE_BASE/admin/database3/dpdump
unlink $ORACLE_BASE/admin/database3/exp
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database3/backup
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database3/dpdump
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database3/exp
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database3/backup $ORACLE_BASE/admin/database3/backup
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database3/dpdump $ORACLE_BASE/admin/database3/dpdump
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database3/exp $ORACLE_BASE/admin/database3/exp
我的输出每次都有 STREAM1a,但我希望它在 1a、2a、3a、1b、2b、3b、1c、2c 和 3c 的模式中循环。如前所述,如果我有超过 9 个数据库,那么它将再次从 1a 开始。我怎样才能做到这一点?
我的代码中唯一没有按我想要的方式工作的部分是它显示“+流+”的地方。
【问题讨论】:
-
您是否希望它循环遍历
db_list中每个项目的所有streams?比如database1 1a、database1 2a、database1 3a等等? -
是的,这正是我想要的。当它到达 database9 时,它将处于 3c。当它到达 database10 时,它需要回到 1a。
-
可能是一个生成器函数