2016-11-15 14 views
0

У меня есть файл большой зоны, который я хочу переместить на другого провайдера. Моя проблема заключается в том, что экспорт - это только один большой файл объединенной зоны, где, поскольку мой новый регистратор принимает только файлы стандартных стандартных зон.Как разобрать файл конкатенированной зоны

Например 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)

Спасибо!

+0

показать код. – furas

+0

получить строку за строкой. Когда вы найдете строку 'domain', затем откройте новый файл (и закройте предыдущий файл, если он был открыт) и напишите следующие строки в этот файл (и по-прежнему проверяйте каждую строку, если есть новый' domain'), поэтому вам нужно 'для строки в файл'. – furas

ответ

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

EDIT: новая версия для любого домена

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

Я думаю, что это немного замешательство. Я исправлю свой пример. domainA, B, C.com действительно ничего, поэтому я не могу использовать флаг startswith 'domain'. Я отредактирую свой вопрос. – chowpay

+0

мой ответ не использует startswith, поэтому в теории нужно обрабатывать любое доменное имя в этой первой строке – davidejones

+0

@chowpay новая версия для любых доменов – furas

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