如何解析连接的区域文件

时间:2016-11-15 18:53:10

标签: python parsing dns zone

我有一个大区域文件,我想转移到另一个提供商。我的问题是导出只是一个大型连接区域文件,因为我的新注册商只接受单个标准区域文件。

例如allzone.txt包含:

somedomain.com
=========
Record data...
...
------------
anotherdomain.com
=========
Record data...
...
------------
evenmoredomain.com
=========
Record data...
...
------------

我想要发生的是它需要上面的一个文件并创建3个文件。

somedomain.txt
anotherdomain.com.txt
evenmoredomain.com.txt

在每个文件中包含以下内容的分隔符:

anydomain.com
========= 
and 
------------ 

仅被移除

"Record data"

之间。

因此,文件应该命名为domainA.com.txt,并且只在相应的记录数据中。

不确定最好的方法是什么。我可以拆分分隔符,但不知道如何将该内容写入一个新文件,其中名称是分隔符之前的名称(anydomain.com)

谢谢!

2 个答案:

答案 0 :(得分:1)

这样的事情可能有用吗?它可能仍需要一些调整

def main():
    with open('allzone.txt', 'r+') as f:
        data = ''
        first_line = ''
        for line in f:
            if first_line == '':
                first_line = line
            elif line == '------------\n':
                new_file = open('%s.txt' % first_line.rstrip(), 'w+')
                new_file.write(data)
                new_file.close()
                first_line = ''
                data = ''
            elif line == '=========\n' or line == '...\n' or line == '------------\n':
                pass
            else:
                data += line


if __name__ == '__main__':
    main()

答案 1 :(得分:1)

或多或少

current_file = None

with open('allzone.txt') as f:

    # read line by line
    for line in f:

        # open next file and close previous
        if line.startswith('domain'):
            # close previous file
            if current_file:
                current_file.close()
            # open new file
            current_file = open(line.strip() + '.txt', 'w')

        # write to current file
        if current_file:
            if not (line.startswith('domain') or line.startswith('---') or line.startswith('===')):
                current_file.write(line)

    # close last file
    if current_file:
        current_file.close()

编辑:任何域名的新版本

current_file = None

with open('allzone.txt') as f:

    # read line by line
    for line in f:

        # open next file
        if not current_file:
            # open new file
            current_file = open(line.strip() + '.txt', 'w')
            # skip next line 
            next(f) 
        else:
            # close previous file
            if line.startswith('---') :
                current_file.close()
                current_file = None
            # write records    
            #elif not line.startswith('==='): # use it if you don't use `next(f)` 
            else:
                current_file.write(line)

    # close last file
    if current_file:
        current_file.close()