Как исправить выходной файл, не ломая вывод построчно? - PullRequest
3 голосов
/ 18 мая 2019

Я пишу скрипт Python для чтения в файле, построчно через этот файл и анализирую данные из этого файла в другой текстовый файл через аргумент командной строки пользователя.Прямо сейчас я могу читать входной файл построчно и анализировать данные с помощью аргумента командной строки.Однако выходной файл, который я пытаюсь записать, печатает все в одной строке, а не разбивает выходную строку на строку.

temp.log:

06 May 19 03:40:35 3 abCodeClearTrap Error Clear Trap (agent: 12367a12,
chassis:12367a12, ErrIdText: ERROR ID TEXT, csssi: EXTIFG, clearedID:
0x089088394)

06 May 19 03:44:35 3 abCodeErrorTrap Error Trap (agent: 12368a15, chassis:
12368a15, ErrIdText: Skip this item, csssi: SSRSSR, clearedID:
0x089088394)

Мой код:

import re, sys

with open('temp.log') as f:
   lines = f.readlines()

with open('output.txt') as o:

    data = []
    for line in lines:
       if 'date' in sys.argv:
           try:
              date = re.match(r'\date{2} \w+ \date{2}', line).group()
              row.append(date)
           except:
              date = 'date'
       if 'agent' in sys.argv:
           try:
              agent = re.search(r'agent:\s(.*?),', line).group()
              row.append(agent)
           except:
              agent = 'agent:'
       if 'err' in sys.argv:
           try:
              errID = re.search(r'ErrIdText:\s(.*?),', line).group()
              row.append(errID)
           except:
              errID = 'ErrIdText:'
       if 'clear' in sys.argv:
           try:
              clear = re.search(r'clearedID:\s(.*?)\)', line).group()
              row.append(clear)
           except:
              clear = 'clearedID:'

       row = []
       data.append(row)

     for row in data:
        lines = o.writelines(row)
        print(row)

     o.close()

Нет сообщения об ошибке, но я хочу, чтобы мой файл output.txt разбивался на строку.

Например: если пользователь запускает:

python export.py agent chassis

Я ожидаю, что output.txt напечатает

['agent: 12367a12,', 'chassis:12367a12,']
['agent: 12368a15,', 'chassis:12368a15,']

Но вывод в output.txt:

agent:12367a12, chassis:12367a12, agent:12368a15, chassis:12368a15,

1 Ответ

3 голосов
/ 18 мая 2019

Вот, пожалуйста:)

for row in data:
    lines = o.writelines(row)
    lines = o.writelines("\n")
    print(row)

или

for row in data:
    row.append("\n")
    lines = o.writelines(row)
    print(row)

Кстати, я удивлен, что этот код работает ... из-за того, что вы определили строку после его использования

   // ( * )
   if something
       try:
          date = re.match(r'\date{2} \w+ \date{2}', line).group()
          row.append(date) // should crash
       except:
          date = 'date'
   if 'agent' in sys.argv:
       try:
          agent = re.search(r'agent:\s(.*?),', line).group()
          row.append(agent) // should crash
       except:
          agent = 'agent:'
   if 'err' in sys.argv:
       try:
          errID = re.search(r'ErrIdText:\s(.*?),', line).group()
          row.append(errID) // should crash
       except:
          errID = 'ErrIdText:'
   if 'clear' in sys.argv:
       try:
          clear = re.search(r'clearedID:\s(.*?)\)', line).group()
          row.append(clear) // should crash
       except:
          clear = 'clearedID:'

   row = [] // this should be defined where I put the star ( * )
   data.append(row) // always appends empty row ( [] )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...