2017-02-13 6 views
-1

У меня есть файл с этим форматом:Чтение строк и записать их в другом формате в Python

ELEM MAT TYP REL ESY SEC  NODES 
     1 1 1 1 0 1  611 2856  618 2582 94075 94107 94065 94068 
           101071 94104 
     2 1 1 1 0 1  598 2856  618  611 93995 94107 93992 93991 
           94075 94065 

    ELEM MAT TYP REL ESY SEC  NODES 

    37561 29 29 1 0 29 32186 32642 32666 32210 32187 32643 32667 32211 
           191297 192707 191370 191296 191300 192710 191373 191299 
           191295 192706 192779 191368 
    37562 29 29 1 0 29 32187 32643 32667 32211 32188 32644 32668 32212 
           191300 192710 191373 191299 191303 192713 191376 191302 
           191298 192709 192782 191371 
    37563 29 29 1 0 29 32188 32644 32668 32212 32189 32645 32669 32213 
           191303 192713 191376 191302 191305 192715 191378 191304 
           191301 192712 192785 191374 

И что мне нужно, чтобы это:

 1 1 1 1 0 1  611 2856  618 2582 94075 94107 94065 94068 101071 94104 
     2 1 1 1 0 1  598 2856  618  611 93995 94107 93992 93991 94075 94065 
    37561 29 29 1 0 29 32186 32642 32666 32210 32187 32643 32667 32211 191297 192707 191370 191296 191300 192710 191373 191299 191295 192706 192779 191368 
    37562 29 29 1 0 29 32187 32643 32667 32211 32188 32644 32668 32212 191300 192710 191373 191299 191303 192713 191376 191302 191298 192709 192782 191371 
    37563 29 29 1 0 29 32188 32644 32668 32212 32189 32645 32669 32213 191303 192713 191376 191302 191305 192715 191378 191304 191301 192712 192785 191374 

мне нужен текст, который будет удалены, а остальная информация должна быть записана в режиме онлайн. Текст можно удалить и постобработкой с помощью excel. Большая проблема заключается в том, чтобы записывать данные в строки, но некоторые данные записываются двумя, а некоторые из них - тремя строками. Файлы содержат номера элементов и номера узлов конечной модели лекций. Мне нужны узлы, написанные после каждого элемента. Любая помощь приветствуется.

+0

Сначала попробуйте какое-то решение/решение для кодирования самостоятельно, и если у вас возникнут проблемы с вашим кодом, тогда вы можете спросить. Прочтите эту ссылку, это поможет вам задать более интересные вопросы. Http://stackoverflow.com/help/how-to-ask –

ответ

1
import re 

with open('untitled.txt') as f: 
    # untitled.txt contains the input text. 
    last_line = [] 
    for line in f: 
     m = re.match('ELEM', line) 
     if m: 
      # if line has header, ignore and continue 
      continue 
     current_numbers = re.findall(r'\d+', line) 
     m = re.match('^\s{20,30}', line) 
     if m: 
      # if line starts with a lot of spaces add values to previous line 
      last_line.extend(current_numbers) 
     else: 
      if last_line: 
       # if we have a previous line print it/ write it to file. 
       print(last_line) 
      # assign new line found as last line and continue with the loop 
      last_line = current_numbers 

if last_line: 
    print(last_line) 

выход:

['1', '1', '1', '1', '0', '1', '611', '2856', '618', '2582', '94075', '94107', '94065', '94068', '101071', '94104'] 
['2', '1', '1', '1', '0', '1', '598', '2856', '618', '611', '93995', '94107', '93992', '93991', '94075', '94065'] 
['37561', '29', '29', '1', '0', '29', '32186', '32642', '32666', '32210', '32187', '32643', '32667', '32211', '191297', '192707', '191370', '191296', '191300', '192710', '191373', '191299', '191295', '192706', '192779', '191368'] 
['37562', '29', '29', '1', '0', '29', '32187', '32643', '32667', '32211', '32188', '32644', '32668', '32212', '191300', '192710', '191373', '191299', '191303', '192713', '191376', '191302', '191298', '192709', '192782', '191371'] 
['37563', '29', '29', '1', '0', '29', '32188', '32644', '32668', '32212', '32189', '32645', '32669', '32213', '191303', '192713', '191376', '191302', '191305', '192715', '191378', '191304', '191301', '192712', '192785', '191374'] 

PS: Вы можете выбрать любой формат для написания его, что зависит от тебя.

+0

Это намного лучше, чем тот, который я пытался написать. Спасибо что учите меня! – GeMa

0

Во-первых, основы:

data_out=open(filename,"r") 
data_in=open(filename+"_output.txt","w") 

for line in data_out: 
    written=False 
    if [...] 

Чем вы могли бы выбрать последовательность, чтобы сделать код признать, если его "основной линии" (например, 1 1 1 1 0 1 611 2856 618 2582 94075 94107 94065 94068) или следующей строкой (94075 94065). Вы можете проверить его, например, с помощью параметров REL/ESY, которые кажутся логическими. Линии похмелья не содержат ничего подобного. Если строка содержит «0» или «1», вы можете сохранить ее как переменную. Затем добавьте следующие строки, пока нет новой базовой линии.

печати его в новый документ

data_in.write(line) 

Не забудьте

data_in.close() 
data_out.close() 
Смежные вопросы