Python 如何解析连接的区域文件

Python 如何解析连接的区域文件,python,parsing,dns,zone,Python,Parsing,Dns,Zone,我有一个大的区域文件,我想移动到另一个提供商。我的问题是,导出只是一个大的连接区域文件,作为我的新注册者,它只接受单个标准区域文件 例如,allzone.txt包含: somedomain.com ========= Record data... ... ------------ anotherdomain.com ========= Record data... ... ------------ evenmoredomain.com ========= Record data... ... -

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

例如,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)


谢谢

也许像这样的办法行得通?它可能还需要一些调整

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()

也许像这样的办法行得通?它可能还需要一些调整

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()
或多或少

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()
或多或少

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()

显示您的代码。逐行获取。当您找到
字符串时,请打开新文件(如果打开了上一个文件,请关闭该文件),并将下一行写入该文件(如果有新的
,请仍然检查每一行)-因此,您需要
来执行文件中的行
循环。显示您的代码。逐行获取。当您找到
字符串,然后打开新文件(如果打开了上一个文件,则关闭该文件),并将下一行写入该文件(如果有新的
,则仍要检查每一行)-因此,您需要
作为文件中的行
循环。我想可能有点混淆,我将修复我的示例。domainA,B,C.com实际上是anything.com,所以我不能用startswith'domain'这个标志。我将编辑我的问题。我的答案不使用startswith,因此理论上应该首先处理任何域名line@chowpay新版本适用于任何domains@furas这是完美的,但我对这部分的工作原理感到困惑<代码>打开(line.strip()…)当您剥离包含domainname.com的第一行,但未在
strip()中定义参数时,它在做什么?例如,如果我有一个字符串xx123123.com和strip(x),我想我会得到123123.com。
strip()
默认情况下会删除空格-换行符、制表符和空格。当您从文件中读取行时,您可能会在结尾处得到带有
\n
的行-因此我将其删除。我想可能有点混淆,我将修复我的示例。domainA,B,C.com实际上是anything.com,所以我不能用startswith'domain'这个标志。我将编辑我的问题。我的答案不使用startswith,因此理论上应该首先处理任何域名line@chowpay新版本适用于任何domains@furas这是完美的,但我对这部分的工作原理感到困惑<代码>打开(line.strip()…)
当您剥离包含domainname.com的第一行,但未在
strip()中定义参数时,它在做什么?例如,如果我有一个字符串xx123123.com和strip(x),我想我会得到123123.com。
strip()
默认情况下会删除空格-换行符、制表符和空格。当您从文件中读取行时,您可能会在结尾处得到带有
\n
的行,因此我将其删除。