从不同文件

时间:2017-10-23 19:21:21

标签: python python-2.7

我有一个包含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

由于

1 个答案:

答案 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特有的。