Можете ли вы удалить случайную строку запятых и заменить на одну для экспорта в CSV - PullRequest
0 голосов
/ 27 июня 2019

Я использую Netmiko для извлечения некоторых данных из коммутаторов и маршрутизаторов Cisco. Я хотел бы поместить эти данные в электронную таблицу. Например, show cdp сосед выдаст мне строку со случайным пробелом в Имя порта Статус Vlan Дуплекс Скорость Тип Et0 / 0 подключен 1 авто авто неизвестно Et0 / 1 подключен 1 авто авто неизвестно Et0 / 2 подключен, маршрутизируется авто, авто неизвестно Et0 / 3 подключен 1 авто авто неизвестно

Я думал, что смогу удалить его и заменить на, но я получаю это

Порт ,,,,,, Имя ,,,,,,,,,,,,,,, Статус ,,,,,,, Vlan ,,,,,,, Дуплекс ,, Скорость, тип Et0 / 0 ,,,,,,,,,,,,,,,,,,,,,,,, подключен ,,,, 1 ,,,,,,,,,,,, авто ,,, авто неизвестный Et0 / 1 ,,,,,,,,,,,,,,,,,,,,,,,, подключен ,,,, 1 ,,,,,,,,,,,, авто ,,, авто неизвестный Et0 / 2 ,,,,,,,,,,,,,,,,,,,,,,,, подключен ,,,, проложены ,,,,,,, авто ,,, авто, неизвестно Et0 / 3 ,,,,,,,,,,,,,,,,,,,,,,,, подключен ,,,, 1 ,,,,,,,,,,,, авто ,,, авто , неизвестно

Любой способ извлечения данных, как указано выше. В идеале, чтобы перейти прямо к структурированной таблице в Excel (ячейки и строки) или в любом случае сделать то, что я сделал, а затем заменить повторяющийся, только одним, чтобы я мог экспортировать в CSV и затем импортировать в Excel. Я, может быть, самый длинный человек, которого вы когда-либо видели, потому что я новичок в программировании:)

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Я бы пошел с регулярными выражениями, которые более гибки. Вы можете адаптировать это к вашим потребностям. Я помещаю данные в список для тестирования, но вместо этого вы можете обрабатывать по 1 строке за раз.

Вот файл (называется mydata.txt)

Et0/0,,,,,,,,,,,,,,,,,,,,,,,,connected,,,,1,,,,,,,,,,,,auto,,,auto,unknown
Et0/1,,,,,,,,,,,,,,,,,,,,,,,,connected,,,,1,,,,,,,,,,,,auto,,,auto,unknown
Et0/2,,,,,,,,,,,,,,,,,,,,,,,,connected,,,,routed,,,,,,,auto,,,auto,unknown
Et0/3,,,,,,,,,,,,,,,,,,,,,,,,connected,,,,1,,,,,,,,,,,,auto,,,auto,unknown

Вот как это прочитать и записать результат в файл csv (mydata.csv)

import re

_re = re.compile('([^,]+)+')

newfile = open(r'mydata.csv', 'w')
with open(r'mydata.txt') as data:
   for line in data.readlines():
      newfile.write(','.join(f for f in _re.findall(line)))
newfile.close()

А вот и вывод

Et0/0,connected,1,auto,auto,unknown
Et0/1,connected,1,auto,auto,unknown
Et0/2,connected,routed,auto,auto,unknown
Et0/3,connected,1,auto,auto,unknown

Объяснение:

  1. Библиотека re позволяет использовать регулярные выражения для анализа текст. Итак, первая строка импортирует его.
  2. Вторая строка определяет регулярное выражение для извлечения чего-либо это не запятая, а только спецификация. Это не на самом деле сделать извлечение
  3. Третья строка открывает выходной файл, где 'w' указывает, что мы можете написать в него. Следующая строка открывает входной файл. Файл ссылка по имени 'newfile'
  4. Четвертая строка читает каждую строку из входного файла по одной.
  5. Пятая строка - операция «все за один раз», отделяющая запятую части ввода, соедините их вместе через запятую, и записать полученную строку в выходной файл.
  6. Последняя строка закрывает выходной файл.
0 голосов
/ 27 июня 2019

Надеюсь, я вас не понял.Чтобы превратить повторяющиеся запятые в одну запятую, просто запустите этот код со строкой s:

while ",," ins s:
    s = s.replace(",,", ",")
...