我有一个包含2个文件的脚本,diff.py和login.py
这是我在diff.py中所拥有的:
domains = ("rt", "tc", "mfg", "ltd")
i = 0
while i<len(domains):
# Opens a files containing different items
with open("Files/"+domains[i]+"-diff_list.txt", 'r') as f:
g = f.readlines()
newList = map(lambda s: s.strip(), g)
print "New " +domains[i]+" List: ", newList
f.close()
i += 1
以下是我在login.py中的内容:
import diff
host = diff.newList
hostDomain = diff.domains
while i < len(host):
print "\nLogging into", host[i], "\n"
login(user, password, host[i], timeout)
** Code omitted: Applying setting for that domains **
i += 1
正如你所看到的那样,问题是我将永远只能获得&#34; ltd&#34;每个循环的域主机用新信息覆盖newList变量,因为&#34; ltd&#34;是最后一项,它总是只返回。
我可以分别访问每个域的所有项目的最佳方式是什么?我不希望一个列表中的所有项目都希望将它们保存在单独的变量中。
我倾向于动态变量,但听到了一个坏主意..当然这不起作用,但我在考虑这样做:
newList+domain[i] = map(lambda s: s.strip(), g)
#I was hoping this would give me 4 variables ..
#newListrt, newListtc, newListmfg and newListltd
由于
答案 0 :(得分:1)
您提供的示例不需要2个文件。如果你需要拆分大代码,那么你应该编写函数。不知道你的整个代码在做什么,下面是一个以我描述的方式重写的例子。
domains = ["rt", "tc", "mfg", "ltd"]
def get_diff_lists():
result = []
with open(filename, 'r') as f:
result = map(lambda s: s.strip(), f.readlines())
return result
for domain in domains:
hosts = get_diff_list("Files/" + domain + "-diff_list.txt")
for host in hosts:
login(user, password, host, timeout)
如你所说,这些需要在单独的文件中,那么你可以使用函数和生成器来实现这一点。
档案#1
domains = ["rt", "tc", "mfg", "ltd"]
def get_diff_list():
for domain in domains:
with open("Files/" + domain + "-diff_list.txt", 'r') as f:
yield map(lambda s: s.strip(), f.readlines())
档案#2
from diff import get_diff_list
for diff_list in get_diff_list():
for host in diff_list:
login(user, password, host, timeout)
如果您发现错误,我可以做到这一点。
我建议阅读一些基本的编程书籍,因为这不是Python特有的。