nat python что это

Numpy: Checking if a value is NaT

How can I check if a datetime64 is NaT? I can’t seem to dig anything out of the docs. I know Pandas can do it, but I’d rather not add a dependency for something so basic.

6 Answers 6

If you don’t want to use pandas you can also define your own function (parts are taken from the pandas source):

This correctly identifies NaT values:

And realizes if it’s not a datetime or timedelta:

Since NumPy version 1.13 it contains an isnat function:

It also works for arrays:

INTRO: This answer was written in a time when Numpy was version 1.11 and behaviour of NAT comparison was supposed to change since version 1.12. Clearly that wasn’t the case and the second part of answer became wrong. The first part of answer may be not applicable for new versions of numpy. Be sure you’ve checked MSeifert’s answers below. When you make a comparison at the first time, you always have a warning. But meanwhile returned result of comparison is correct:

If you want to suppress the warning you can use the catch_warnings context manager:

EDIT: For some reason behavior of NAT comparison in Numpy version 1.12 wasn’t change, so the next code turned out to be inconsistent.

And finally you might check numpy version to handle changed behavior since version 1.12.0:

EDIT: As MSeifert mentioned, Numpy contains isnat function since version 1.13.

Источник

nat 0.4.3

pip install nat Copy PIP instructions

Released: Aug 22, 2018

Module to use the annotations created with NeuroCurator.

Navigation

Project links

Statistics

View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery

License: Free for non-commercial use, GNU General Public License v3 (GPLv3) (GPLv3)

Tags neuroscience, annotation, curation, literature, modeling, parameters

Requires: Python >=3

Maintainers

Classifiers

Project description

NeuroAnnotation Toolbox (NAT)

Python module to use the annotations created with NeuroCurator, for example in a Jupyter notebook.

This framework has been described in details in the following open-access paper: https://doi.org/10.3389/fninf.2017.00027.

NAT provides the necessary functions and utilities to:

Getting Started

Requirements:

Installation:

Releases

Versions and their notable changes are listed in the releases section.

Releases are synchronized with the ones of NeuroCurator.

Status

Created during 2016.

Ongoing stabilization and reengineering in the branch refactor-architecture.

The branch refactor-architecture is not intended to be used by end-users.

New features, bug fixes and improvements are done on the reengineered code sections.

When a reengineered code section is stable, it’s merged into the branch master and a release is published.

Источник

Numpy: проверка значения NaT

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

6 ответов

введение: этот ответ был написан в то время, когда Numpy была версией 1.11, и поведение сравнения NAT должно было измениться с версии 1.12. Ясно, что это не так и вторая часть ответа не получилось. Первая часть ответа может быть неприменима для новых версий numpy. Убедитесь, что вы проверили ответы MSeifert ниже.

Когда вы делаете сравнение в первый раз, у вас всегда есть предупреждение. Но тем временем вернулся результат сравнение правильное:

если вы хотите подавить предупреждения, вы можете использовать catch_warnings контекст-менеджера:

EDIT: почему-то поведение сравнения NAT в Numpy версии 1.12 не изменилось, поэтому следующий код оказался непоследовательным.

и, наконец, вы можете проверить версию numpy для обработки измененного поведения с версии 1.12.0:

EDIT: As MSeifert упомянуто, Numpy содержит isnat функция с версии 1.13.

панды можно проверить на NaT С pandas.isnull :

если вы не хотите использовать панды, вы также можете определить свою собственную функцию (части взяты из источника панды):

это правильно определяет значения NaT:

и понимает, если это не datetime или timedelta:

Так как NumPy версии 1.13 он содержит isnat функция:

Он также работает для массивов:

очень просто и удивительно быстро: (без numpy или панд)

хорошо, это немного неприятно, но, учитывая двусмысленность вокруг «NaT», это делает работу хорошо.

это также полезно при сравнении двух дат, каждая из которых может быть NaT следующим образом:

этот подход позволяет избежать предупреждений при сохранении оценки, ориентированной на массив.

Источник

Приём UDP пакетов за NAT’ом

Я получаю доступ в интернет через роутер, то есть, в отличии от роутера, не имею внешнего IP. Так же имеется сервер, но уже с внешним IP.

Верно ли, что отправленный мной UDP пакет, проходя через роутер, претерпит преобразование исходящих адреса и порта, и пробросит новый порт наружу чтобы сервер смог прислать мне ответ? То есть если я отправляю пакет с порта 5000, то, достигнув роутера, номер исходящего порта поменяется на случайное x и роутер запомнит, что все входящие пакеты на порт x нужно перебрасывать на мой IP к 5000’ому порту.

Практика

Если это верно, то почему не подтверждается следующим кодом?

Пакет отправляю так

Сразу после отправки начинаю слушать

Но прослушка ничего не выводит. Почему?

Всё тоже самое, но в рамках локальной сети, работает корректно.

2 ответа 2

Верно ли, что отправленный мной UDP пакет, проходя через роутер, претерпит преобразование исходящих адреса и порта, и пробросит новый порт наружу чтобы сервер смог прислать мне ответ? То есть если я отправляю пакет с порта 5000, то, достигнув роутера, номер исходящего порта поменяется на случайное x и роутер запомнит, что все входящие пакеты на порт x нужно перебрасывать на мой IP к 5000’ому порту.

Вам, вероятно, нужен не порт, который слушается сервером, а внешний порт, на который роутер отобразил внутренний порт, на котором вы реально слушаете. Иначе говоря, вам нужно:

Кстати, можете почитать: Peer-to-Peer Communication Across Network Address Translators. Когда-то я реализовывал описанную там методику (аналогичная вашей теории) и все более-менее работало.

Источник

Зачем сетевику Python

«Сетевому администратору необходимо уметь программировать» — эта фраза часто вызывает возражения у многих сетевиков.

— Зачем? Руками оно надёжнее.
— Зато можно автоматизировать типовые операции.
— И положить кучу устройств, если что-то пойдёт не так?
— Положить кучу устройств можно и руками.

Вы прослушали краткое содержание типовых дискуссий по этому вопросу. Большинство админов останавливается на редактировании в текстом редакторе ранее скопированных кусков конфига и копировании их в консоль. Или подготовка типовых конфигурационных файлов, но добавление их на оборудование руками через консоль.

И Cisco здесь не одинока: Juniper c PyEZ, HP, Huawei и тд.

Множество инструментов — Netconf, Restconf, Ansible, Puppet и Python, Python, Python. Анализ конкретных инструментов отложим на потом, перейдём к конкретному примеру.

Второй вопрос, который иногда вызывает бурные дискуссии, как правило приводящий к полному непониманию друг друга: «А нужны сетевику сетевые устройства в DNS?».
Оставим подробный анализ позиций участников на потом, сформулируя задачу, которая привела к Python и SNMP. А началось всё с traceroute.

Несмотря на наличие разнообразных систем мониторинга, которые бдят и видят многое, MPLS-TE, который разворачивает трафик причудливым образом, верный ICMP и утилиты traceroute и ping во многих случаях способны дать нужную информацию быстро и сейчас. Но вывод traceroute только ввиде IP адресов в большой сети потребует дополнительных усилий для понимания того, откуда именно пришли пакеты. Например, мы видим, что прямой и обратный трафик от пользователя идёт через разные маршрутизаторы, но по каким именно? Решение очевидно, занести адреса маршрутизаторов в DNS. А для корпоративных сетей, где редко используют unnumbered, ставя на соединители отдельные адреса, в случае занесения адресов интерфейсов в DNS, можно будет быстро понять, через какой интерфейс пакет ICMP вышел с маршрутизатора.

Однако вести вручную базу DNS на большой сети требует очень больших трудозатрат не самого сложного труда. А ведь доменное имя интерфейса будет состоят из названия интерфейса, description интерфейса, hostname маршрутизатора и названия домена. Всё это маршрутизатор несёт в своей конфигурации. Главное это собрать и правильно склеить и привязать к правильному адресу.

Значит эту задачу надо автоматизировать.

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

Вторая мысль, использовать то, что даёт нужные ответы на универсальные запросы к оборудованию разных вендоров. Ответ был очевиден — SNMP. Он, при всех своих особенностях, реализован в ПО любого вендора.

Итак, начнём

pip3 install datetime

pip3 install ipaddress

Попробуем получить с маршрутизатора его hostname. SNMP использует для запросов к хосту OID. На OID хост вернёт информацию, соответствующую этому OID. Хотим получить hostname — нужно запрашивать 1.3.6.1.2.1.1.5.0.

И так первый скрипт, который запрашивает только hostname.

Запускаем и получаем:

Разберём скрипт поподробнее:

Сначала мы импортируем необходимые модули:

1. pysnmp — обеспечивает работу скрипта с хостом по SNMP

2. ipaddress — обеспечивает работу с адресами. Проверка адресов на корректность, проверка на вхождения адреса в адрес сети и тд.

3. datetime- получение текущего времени. В данной задаче нужен для организации логов.

Потом заводим четыре переменных:

1. community
2. адрес хоста
3. порт SNMP
4. значение OID

1. snmp_getcmd
2. snmp_get_next

Первая функция посылает запрос GET указанному хосту, по указанному порту, с указанным comminity и OID.
Вторая функция это генератор snmp_getcmd. Наверное разбивать на две функции было не совсем правильно, но уж так получилось:)

В этом скрипте не хватает некоторых вещей:

1. В скрипт необходимо загрузить ip адреса хостов. Например, из текстового файла. При загрузке необходимо проверить загружаемый адрес на корректность, иначе pysnmp может очень сильно удивиться и скрипт остановится с traceback. Непринципиально, откуда вы будете брать адреса из файла, из базы даных, но вы должны быть уверены, что адреса, которые вы получили — корректные. И так, источник адресов текстовый файл, одна строка — один адрес в десятичной форме.

2. Сетевое оборудование может быть выключено на момент опроса, может быть неправильно настроено, в итоге pysnmp выдаст в этом случае совершенно не то, что мы ждём и при дальнейшей обработке полученной информации получим остановку скрипта с traceback. Нужен обработчик ошибок для нашего взаимодействия по SNMP.

3. Нужен лог файл, в который будут записываться обработанные ошибки.

Загружаем адреса и создаём лог файл

Вводим переменную для имени файла.
Пишем функцию check_ip на проверку корректности адреса.
Пишем функцию get_from_file загрузки адресов, которая проверяет каждый адрес на корректность и если это не так, записывает об этом сообщение в лог.
Реализуем загрузку данных в список.

Создадим файл ip.txt

Error ip 12.43.dsds.f4
hostname= MikroTik
Traceback (most recent call last):
File «/snmp/snmp_read3.py», line 77, in print(‘hostname= ‘ + sysname)
TypeError: Can’t convert ‘NoneType’ object to str implicitly

Process finished with exit code 1

Из содержимого traceback невозможно понять, что причиной сбоя стал недоступный хост. Попробуем перехватить возможные причины остановки скрипта и записать всю информацию в лог.

Создаём обработчик ошибок для pysnmp

В функции snmp_get_next уже есть вывод ошибок errorIndication, errorStatus, errorIndex, varBinds. В varBinds выгружаются полученные данные, в переменные, начинающиеся с error, выгружается информация по ошибкам. Это только нужно правильно обработать. Так как в дальнейшем в скрипте будет ещё несколько функций по работе с snmp, имеет смысл обработку ошибок вынести в отдельную функцию.

И теперь добавляем в функцию snmp_get_next обработку ошибок и запись в лог файл. Функция теперь должна возвращать не только данные, но и сообщение о том, были ли ошибки.

Теперь необходимо немного переписать code section, с учётом того, что теперь есть сообщения об успешности запроса. Кроме этого, добавим несколько проверок:

1. Sysname меньше, чем три символа. Запишем в лог файл, чтобы потом присмотреться по пристальнее.

2. Обнаружим, что некоторые Huawei и Catos отдают на запрос только hostname. Так как отдельно выискивать для них OID совершенно не хочется (не факт, что он вообще есть, может это ошибка ПО), добавим таким хостам domain вручную.

3. Обнаружим, что хосты с неправильным comminity ведут себя по разному, большинство инициирует срабатывание обработчика ошибок, а некоторые почему-то отвечают, что скрипт воспринимает как нормальную ситуацию.

4. Добавим на время отладки разный уровень логирования, чтобы потом не выковыривать по всему скрипту лишние сообщения.

Проверим этот скрипт на том же файле ip.txt

Error Мусор в источнике ip адресов 12.43.dsds.f4
hostname= MikroTik.mydomain.ru
No SNMP response received before timeout ip address 172.1.1.1
hostname= MikroTik.mydomain.ru

Всё отработало штатно, мы поймали все ошибки, скрипт пропустил хосты с ошибками. Теперь этим скриптом можно собрать hostname cо всех устройств, отвечающих на snmp.

Полный текст скрипта прячу под спойлер.

Теперь осталось собрать имена интерфейсов, description интерфейсов, адреса интерфейсов и правильно разложить в конфигуционные файлы bind. Но об этом во второй части.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *