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