通过python中的文件工作

时间:2014-12-11 11:11:01

标签: python dns

我是python的新手,我正在尝试学习它。我想从DNS区域文件中获取信息。 DNS文件包含以下条目:

something 600 A 192.168.123.45
          600 A 192.168.123.46
someelse CNAME something
anotherone A 192.168.123.47
nextone CNAME anotherone
anotherone TXT ( "te asd as as d" )

目标是获取主机名,如果有相应的TXT条目,我也想获得该条目的信息。

所以我开始只是处理文件,如果我要描述这些条目,记录类型是在[2]或[1],在它之后,我得到了IP。所以我现在有这样的事情:

for line in data:
    word = line.split() 
    if len(word) > 2:
        if "CNAME" == word[2]:
            rectype = "CNAME"
             arecord = word[3].replace('.domain.com.', '')
            print rectype + " " + arecord
        if "CNAME" == word[1]:
            rectype = "CNAME"
             arecord = word[2].replace('.domain.com.', '')
            print rectype + " " + arecord
        if "A" == word[2]:
            rectype = "A"
            print rectype + " " + word[3]
        if "A" == word[1]:
            rectype = "A"
            print rectype + " " + word[2]

好吧,到目前为止一切都很好..但是现在如果我想获得相应的TXT记录,我是否需要在每行的文档中处理每一行,还是他们更容易,更有效的方法呢?

2 个答案:

答案 0 :(得分:0)

我建议您构建一个字典,其键是标识符(“anotherone”将是您示例中的一个示例),其值为字符串(或者可能是字符串列表 - 我在DNS上生锈并且不确定如果可以多次使用。)

当您遇到CNAME和A记录时,将标识符作为键添加到字典中,并将其对应的值初始化为空列表。然后当你点击一行中有“TXT”时,在字典中查找该标识符并将该行添加为值。

答案 1 :(得分:0)

Python的一部分优点是你可以编写像英语一样的代码,它使用直观的操作符。

您有重复代码很多。在您的示例中,我们可以看到,只要弹出“关键字”,例如ACNAME,您就可以使用下一个标记。在这里,我使用了in Python关键字来检查元素是否在某种集合中。这是一个布尔值,所以如果它返回true,那么我接下一个元素,即tokens[tokens.index(keyword) + 1]

同样,in也可用于字符串和子字符串搜索。我检查当前行中是否有“TXT”,如果是,我认为你想要它之后的一切?我使用splice运算符来指定范围。 line[line.index("TXT") + 3:]表示我希望所有内容都在之后索引line.index("TXT") + 3

KEYWORDS = ["CNAME", "A"]

for line in data:
    tokens = line.split()
    if len(tokens) > 2:
        record = ""
        for keyword in KEYWORDS:
            if keyword in tokens:
                record = keyword + " " + tokens[tokens.index(keyword) + 1]

        if "TXT" in line:
            txt_data = line[line.index("TXT") + 3:]
            record += "TXT: " + txt_data

        print record