Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Python

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Открыть новую тему     Написать ответ в эту тему

Adm10



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здесь обсуждается всё, что связано с использованием Python: программирование, библиотеки, ресурсы и другие вопросы

Python


Python - высокоуровневый язык программирования общего назначения с динамической типизацией и автоматическим управлением памятью, ориентированный на повышение производительности разработчика, читаемости кода и его качества, а также на обеспечение переносимости написанных на нём программ

С чего начать?
Простой, понятный и вместе с тем грамотный ресурс на русском языке: pythonworld.ru + самоучитель
Библия PEP8

Всего записей: 35 | Зарегистр. 13-10-2006 | Отправлено: 15:48 16-06-2007 | Исправлено: shrmn, 22:22 07-03-2021
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
да хрен с ним...
 
лучше скажи, откуда здесь жёсткие значения "3"?
data[1:3]
data[3:]
свои N M подставлять?
в пред. версиях вроде автоматом всё считалось?
      ]

Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 00:36 30-11-2019
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
"жесткие" значения - номера строк в файле
[0] - первая
[1:3] - вторая и третья
[3:] - с четвертой и до конца.

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 00:37 30-11-2019 | Исправлено: Mavrikii, 00:39 30-11-2019
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
короче, пока запряг код Alex_Piggy...
не знаю что там "щепится" с ";", но работает :)
 

Код:
def dataline(f):  
  return f.readline().split(";")[0].strip().split()  
   
f = open (filename, "rt")
 
NX, MY = [int(x) for x in dataline(f)]
X, Y   = [float(x) for x in dataline(f)], [float(y) for y in dataline(f)]  
Z      = [] #np.zeros((N, M), dtype=float)  
 
N = NX - 1
M = MY - 1
 
for i in X:  
  Z.append([float(x) for x in dataline(f)])  
 
print('-----------------------------------------\n')    
print(NX, MY)
 
print(X[0], X[1], X[N])
print('\n')
print(Y[0], Y[1], Y[M])
print('\n')
print(Z[0][0], Z[0][1], Z[1][0], Z[N][M])
print('\n')
print(Z)
print('-----------------------------------------\n')

 
Mavrikii
Alex_Piggy

 
большое спасибо...

Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 01:10 30-11-2019
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну а всё-таки, что делает строка кода:
 
 return f.readline().split(";")[0].strip().split()
 
методы строк я точно ещё поучу, обещаю :)
 
Добавлено:
 
 
кажись просёк...
 
вместо
 return f.readline().split(";")[0].strip().split()
надо просто
 return f.readline().strip().split()
 

Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 15:17 30-11-2019
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помоги себе сам...
 

откуда начать...
 
  • самый простой, доступный и вместе с тем грамотный ресурс на русском:
    https://pythonworld.ru/
     
  • там же самоучитель (всего 150 страниц основы и никакой воды):
    https://pythonworld.ru/samouchitel-python
     
  • и библия PEP8
    https://pythonworld.ru/osnovy/pep-8-rukovodstvo-po-napisaniyu-koda-na-python.html


    теаперь это в шапке...

  • Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 02:15 01-12-2019 | Исправлено: akaGM, 02:19 01-12-2019
    Mavrikii

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM

    Цитата:
    надо просто
     return f.readline().strip().split()

    можно и без strip()

    Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 00:54 02-12-2019
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mavrikii
     
    если не уследить, то некоторые фортраны первым символом пробел напишут...
    а если ручками править, то сзади тоже много чего можно наструячить...

    Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 13:56 02-12-2019
    Mavrikii

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM

    Цитата:
    первым символом пробел напишут.

    И пусть пишут.
    https://pythonz.net/references/named/str.split/

    Цитата:
      '   1   2   3   '.split()  # ['1', '2', '3']  

    Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 16:10 02-12-2019 | Исправлено: Mavrikii, 16:13 02-12-2019
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    возможен ли мixed languages программинг с участием питона?
    короче, можно ли из питон-кода получить, например, длл?
     
    лень искать, заранее спасибо...

    Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 14:30 10-01-2020
    Mavrikii

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
    https://docs.python.org/2/extending/embedding.html
    https://docs.python.org/3/extending/embedding.html

    Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 17:33 10-01-2020
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mavrikii
     
    ок, спасибо...
    как-то всё это проктологично %)
     
    ещё вопрос:
    питоновсие экзюки нормально, например, через exec() заходят?
    ну и на крайняк остаётся старый дедовский метод под званием файл эксченж...

    Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 18:29 10-01-2020
    Clop345

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Товарищи, помогите!
    Нужно чуть-чуть скорректировать скрипт на Python. Я его не знаю совсем и разбираться времени нет.
    Задача: есть файл XML, в котором скриптом проверяются некоторые значения (по выбору)
    Файл XML генерируется неким оборудованием.
    Скрипт может сравнить значение node, полученный из файла XML с заданными пределами и вернуть 0,1 или 2 (для мониторинга Nagios)
     
    Беда в том, что значения в возвращаемом xml обернуты в двойные кавычки, отчего скрипт вываливается с ошибкой:
    Цитата:
    ValueError: could not convert string to float:

    Это определено опытным путем - если из нужного значения node убрать кавычки, скрипт отрабатывает нормально.
     
    Прошу помочь знатоков языка и изменить скрипт так, чтобы он отбрасывал кавычки из значений.
    Тело скрипта и файл для примера прилагаю.  
    Скрипт:

    Код:
    #!/usr/bin/env python
    #
    # Program: check_xml
    # Version: 1.0
    # Date   : Nov 14, 2014
    # Author : Phillipe Smith <phillipelnx@gmail.com>
    # License: GPL (summary below and full text at http://www.fsf.org/licenses/gpl.txt)
    #   This program is free software; you can redistribute it and/or modify
    #   it under the terms of the GNU General Public License as published by
    #   the Free Software Foundation; either version 2 of the License, or
    #   (at your option) any later version.
    #
    #   This program is distributed in the hope that it will be useful,
    #   but WITHOUT ANY WARRANTY; without even the implied warranty of
    #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    #   GNU General Public License for more details.
    #
    #   You should have received a copy of the GNU General Public License
    #   along with this program; if not, write to the Free Software
    #   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    #
    #
    # Description:
    #   Nagios plugin to make services based on XML file or URL.
    #   The plugin generates the service based on Xpath based search
    #
    # Command line usage example:
    #   ./check_xml -u 'http://adobe_flash_media_server:1111/admin/getServerStats?auser=admin&apswd=admin' -n 'data/io/connected,total_connects,total_disconnects' -l 'connected:80:100'
    #   ./check_xml -f teste-file.xml -n './status,timestamp:./Users/connected:./Users/user/name,email' -l 'connected:80:100'
    #
    # Nagios configuration example:
    #   define command {
    #       command_name    check_xml
    #       command_line    $USER1$/check_xml -u "$ARG1$" -n "$ARG2$" -l "$ARG3$" -p
    #   }
    #
    #   define service {
    #       use                    generic_service
    #       host_name              HOST_1
    #       service_description    Adobe Flash Media Server Connections
    #       check_command          check_xml!data/io/connected,total_connects,total_disconnects!connected:80:100
    #   }
    #
    #
     
    # Importing necessary python modules
    import sys
    from urllib2 import urlopen, HTTPError, URLError
    from optparse import OptionParser
     
    # Plugin options definitions
    parser = OptionParser()
    parser.add_option('-u', '--url', dest='url', default=False, help='XML Document URL')
    parser.add_option('-f', '--file', dest='file', default=False, help='XML Document File')
    parser.add_option('-l', '--levels', dest='levels', default='', help='Thresholds based on the node name\nThe format must be like: "node_name:warn:crit". Ex.: "users_connected:80:100,total_users:100:150"')
    parser.add_option('-n', '--childnode', dest='childNode', default=False, help='Retrive childNode(s) value(s) from given XPath format,\n plus conma separated child nodes \nEx.: /Users/user/name,email,address')
    parser.add_option('-p', '--perfdata', dest='perfdata', action='store_true', help='Generate perfdata')
    options, args = parser.parse_args()
     
    # Variables definitions
    result   = []
    info     = ''
    textinfo  = ''
    url       = options.url
    file      = options.file
    childNode = options.childNode
    levels    = options.levels.strip().split(',')
    perf      = options.perfdata
    perfdata  = []
     
    # Try import python xml module
    try:
        import xml.etree.cElementTree as elt
    except ImportError:
        import xml.etree.ElementTree as elt
     
    # Try retrieve XML informations from a http url
    if url:
        try:
            xml = urlopen(url)
        except HTTPError as err:
            print 'CRIT - %s' % err
            sys.exit(1)
        except URLError as err:
            print 'CRIT - %s' % err
            sys.exit(1)
    elif file:
        try:
            xml = open(file)
        except Exception as err:
            print 'CRIT - %s' % err
            sys.exit(1)
    else:
        print 'UNKNOWN - No XML URL/File or no Xpath search passed.\n'
        parser.print_help()
        sys.exit(3)
     
    # Variable that will receive the XML content
    xmltree = elt.ElementTree(file=xml)
    output = []
     
    # Defining the XML nodes parents and childs
    # based on the search made
    if childNode:
        for node in childNode.split(':'):
            if '/' in node:
                parent = '/'.join(node.split('/')[:-1]) + '/'
                child  = node.split('/')[-1].split(',')
            else:
                parent = './'
                child  = node.split(',')
     
            # Loop through child nodes to define the service
            for value in child:
                node = parent + value.strip()
                if xmltree.findall(node):
                    node = xmltree.findall(node)[0]
                    textinfo = '%s: %s' % (node.tag, node.text)
                    if levels and levels[0] != '':
                        for level in [ x.split(':') for x in levels if node.tag in x ]:
                            if float(node.text) > float(level[2]):
                                textinfo = '%s: %s (crit)' % (node.tag, node.text)
                            elif float(node.text) > float(level[1]):
                                textinfo = '%s: %s (warn)' % (node.tag, node.text)
                            perfdata.append('%s=%s;%s;%s;' % (node.tag, node.text, level[1], level[2]))
                    else:
                        if not node.text.isalpha():
                            perfdata.append('%s=%s;' % (node.tag, node.text))
                    result.append(textinfo)
    else:
        print 'UNKNOWN - No XML URL/File or no Xpath search passed.\n'
        parser.print_help()
        sys.exit(3)
     
     
    # Service state definition
    for info in result:
        if '(crit)' in info:
            status = (2, 'CRIT')
            break
        elif '(warn)' in info:
            status = (1, 'WARN')
            break
        else:
            status = (0, 'OK')
            break
     
    # Printing the result
    if perf:
        print '%s - %s | %s' % (status[1], ', '.join(result), ' '.join(perfdata))
    else:
        print '%s - %s' % (status[1], ', '.join(result))
     
    # Exiting based on the status number
    sys.exit(status[0])
     

     
    Файл XML

    Код:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <xweb500 name="XWEB500">
    <device name="ВО задний № 2" adr="2">
    <dvcNoLink>0</dvcNoLink>
    <dvcOn>1</dvcOn>
    <analogInput>
     <name>"Температура на входе"</name>
     <unit>"°C"</unit>
     <value>"9.3"</value>
    </analogInput><setPoit>
     <name>"SetPoint"</name>
     <unit>"°C"</unit>
     <value>"9.0"</value>
    </setPoit><digitalInput>
     <name>"Generic Digital Input"</name>
     <value>"0"</value>
    </digitalInput><outputStatus>
     <name>"Fan"</name>
     <value>"0"</value>
    </outputStatus><outputStatus>
     <name>"Cooling"</name>
     <value>"0"</value>
    </outputStatus><deviceStatus>
     <name>"On"</name>
     <value>"1"</value>
    </deviceStatus><alarm>
     <name>"Error Pb1"</name>
     <value>"0"</value>
    </alarm><alarm>
     <name>"Error Pb2"</name>
     <value>"0"</value>
    </alarm><alarm>
     <name>"High Value Pb1"</name>
     <value>"0"</value>
    </alarm><alarm>
     <name>"Low Value Pb1"</name>
     <value>"0"</value>
    </alarm><alarm>
     <name>"High Value Pb2"</name>
     <value>"0"</value>
    </alarm><alarm>
     <name>"Low Value Pb2"</name>
     <value>"0"</value>
    </alarm></device>
    </xweb500>
     

     
    Пример использования, который выдает ошибку:
     

    Код:
     
    ./check_xml -f /root/test.xml -n 'device/analogInput/value' -l 'value:9:20'
    Traceback (most recent call last):
      File "./check_xml", line 121, in <module>
        if float(node.text) > float(level[2]):
    ValueError: could not convert string to float: "9.3"
     
     

     
    Заранее благодарен всем откликнувшимся!
     

    Всего записей: 53 | Зарегистр. 22-03-2010 | Отправлено: 17:09 23-01-2020 | Исправлено: Clop345, 17:10 23-01-2020
    Mavrikii

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Clop345
    float(node.text.strip('\"')) где нужно

    Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 18:25 23-01-2020
    Clop345

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    float(node.text.strip('\"')) где нужно

     
    Спасибо, но проблема в понимании "где нужно". Я не могу понять в каком месте кода выделяются значения.
    Можете показать где именно надо исправить?

     
    Разобрался! Большое спасибо! Работает

    Код:
     
     for level in [ x.split(':') for x in levels if node.tag in x ]:
                            if float(node.text.strip('\"')) > float(level[2]):
                                textinfo = '%s: %s (crit)' % (node.tag, node.text)
                            elif float(node.text.strip('\"')) > float(level[1]):
                                textinfo = '%s: %s (warn)' % (node.tag, node.text)
                            perfdata.append('%s=%s;%s;%s;' % (node.tag, node.text, level[1], level[2]))
     
     

    Всего записей: 53 | Зарегистр. 22-03-2010 | Отправлено: 07:59 24-01-2020 | Исправлено: Clop345, 08:12 24-01-2020
    Vasily_Koshkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LZAA

    Цитата:
     FileNotFoundError: [WinError 2] The system cannot find the file specified  

    Я тут подумал... А существует какой-то универсальный способ отлаживать такие ошибки?
    Скажем, чтобы "указанный файл", который "не удается найти системе" действительно был указан?  
    Возможно, вопрос дурацкий, но вдруг кто-то встречал или реализовывал такое? Подскажите, в какую сторону копать? Спасибо.  

    Всего записей: 1377 | Зарегистр. 07-02-2004 | Отправлено: 17:59 05-02-2020 | Исправлено: Vasily_Koshkin, 18:01 05-02-2020
    SysCommander

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Clop345
     
    В шапке скрипта указан email разработчика. Смело шлите баг репорт и даже багфикс если есть. Чтобы у всех работало. Именно так free software и развивается.

    Всего записей: 421 | Зарегистр. 20-07-2007 | Отправлено: 17:59 13-02-2020
    Mavrikii

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Vasily_Koshkin

    Цитата:
    А существует какой-то универсальный способ отлаживать такие ошибки?


    Код:
    try:
        # код работающий с файлами
        # ...
    except FileNotFoundError as not_found:
        print(not_found.filename)

    Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 23:00 13-02-2020
    Steepe_Hare



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа, подскажите ссылки на ресурсы типа torry.net для Delphi, но для Python

    Всего записей: 1162 | Зарегистр. 27-10-2001 | Отправлено: 07:10 14-02-2020
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    https://pypi.org
    https://www.lfd.uci.edu/~gohlke/pythonlibs/
     
    например...

    Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 12:30 14-02-2020
    Steepe_Hare



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
     
    спасибо, а есть ресурс с разбитием Python-библиотек по темам и областям? с рейтингом, сравнением, сильными и слабыми сторонами библиотек?

    Всего записей: 1162 | Зарегистр. 27-10-2001 | Отправлено: 17:26 14-02-2020
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Python


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru