Ru-Board.club
← Вернуться в раздел «Web-программирование»

» Язык программирования Python (Питон, Пайтон)

Автор: bomzhe
Дата сообщения: 19.04.2013 07:33
BagaBaga
Попробуйте так:

Код: from subprocess import Popen, PIPE
data, errors = Popen(r'7z e -so g:\1.Z', stdout=PIPE, stderr=PIPE).communicate()
print('%d bytes unpacked.' % len(data) if data else errors.decode())
Автор: BagaBaga
Дата сообщения: 10.05.2013 23:54
Возник еще такой вопрос. Мне нужны тригонометрические (и обратные тригонометрические) функции с точностью (операнда и результата) double. Если я правильно понял, модуль math содержит реализацию с float. Как можно считать (и простую арифметику, и тригонометрию) с double? Отличия в результате выполнения питоновского кода (полученого копипастой "в лоб") и фортрановского наблюдаются в третьем-четвёртом знаке после запятой ...
Автор: Cheery
Дата сообщения: 11.05.2013 00:14
BagaBaga
в питоне float и есть double
если нужно еще больше - смотрите на NumPy

либо, к примеру, decimal
http://docs.python.org/2/library/decimal.html
Автор: BagaBaga
Дата сообщения: 11.05.2013 12:32
Странно тогда, что код один-в-один, а результаты "питоновского порта" и "фортрановского исходника" разнятся уже в третьем знаке после запятой...
Автор: karakurt2
Дата сообщения: 11.05.2013 16:12
ActivePython для 32-разрядной и 64-разрядной архитектуры могут сосуществовать на одной машине?
-- не рекомендуется
Автор: Cheery
Дата сообщения: 11.05.2013 20:18
BagaBaga

Цитата:
а результаты "питоновского порта" и "фортрановского исходника" разнятся уже в третьем знаке после запятой...

пример кода покажите..
Автор: BagaBaga
Дата сообщения: 13.05.2013 20:30
под катом (пример кода)
[more]
фортран (параметр art не используется, на вход - географическая долгота и коширота, на выход - геомагнитная долгота [dolm] и коширота [tetm])

Код:
SUBROUTINE GGMRAW(ART,DOLG,TET,DOLM,TETM)
INTEGER ART
DOUBLE PRECISION ZPI,FAKTOR,CBG,CI,SI,XLM,BM,CBM,SBM,
* CLM,SLM,SBG,BG,SLG,CLG,XLG,YLG
ZPI=6.28318530718
FAKTOR=0.01745329252
CBG=11.4*FAKTOR
CI=DCOS(CBG)
SI=DSIN(CBG)
BG=90.-TET
XLG=DOLG
YLG=XLG+69.8
CBG=DCOS(BG*FAKTOR)
SBG=DSIN(BG*FAKTOR)
CLG=DCOS(YLG*FAKTOR)
SLG=DSIN(YLG*FAKTOR)
SBM=SBG*CI+CBG*CLG*SI
BM=DASIN(SBM)
CBM=DCOS(BM)
SLM=(CBG*SLG)/CBM
CLM=(-SBG*SI+CBG*CLG*CI)/CBM
if(abs(clm).gt.1.0d0)then
CLM=sign(10.0d-1,CLM)
endif
XLM=DACOS(CLM)
IF(SLM.LT.0.0) XLM=ZPI-DACOS(CLM)
BM=BM/FAKTOR
XLM=XLM/FAKTOR
DOLM=XLM
IF(ABS(TET-180.).LT.1.E-3)DOLM=0.
TETM=90.-BM
RETURN
END
Автор: Cheery
Дата сообщения: 13.05.2013 20:39
BagaBaga
ну, вообще то, double precision это 8 байт, а float в питоне - тоже 8 байт

ps: эх, давно не писал на фортране (а приходилось), но у вас явная ошибка

Цитата:
SUBROUTINE GGMRAW(ART,DOLG,TET,DOLM,TETM)
INTEGER ART
DOUBLE PRECISION ZPI,FAKTOR,CBG,CI,SI,XLM,BM,CBM,SBM,
* CLM,SLM,SBG,BG,SLG,CLG,XLG,YLG

а где описание типа передаваемых переменных? может, конечно, в используемом вами диалекте это не нужно, но DOLG и остальные явно не будут double precision и могут быть чем угодно.
я, помнится, в свое время, очень намучался с этим, так как фортрану безразличен тип, работает напрямую с памятью.
по умолчанию входные параметры будут FLOAT, но я не знаю с какой точностью вы их задаете.

дайте хотя бы какие то цифры для сравнения.
Автор: BagaBaga
Дата сообщения: 14.05.2013 23:25
Хм, воспроизвести расхождение в третьем знаке не получается (забыл, на каких координатах тестировал). Все расхождения сейчас начинаются с 4го знака, а 5-6 цифр вроде и есть "предел" точности float.

Код:
(коширота, долгота) (90., 270.)
фортран -----> (79.309720, 339.427200)
питон -----> (79.30971309266545, 339.4272171141133)

(коширота, долгота) (180., 180.)
фортран -----> (168.600000, 0.000000Е+00)
питон -----> (168.59999999960664, 0.0 )
Автор: Cheery
Дата сообщения: 14.05.2013 23:46
BagaBaga

Цитата:
Тогда похоже, что эти параметры по умолчанию в фортрановском коде float

без описания их в функции они и будут FLOAT
что и видно из результатов )) это округление срабатывает.

да и не забывайте, что все вычисления с плавающей запятой в компьютере имеют погрешность.
Автор: BagaBaga
Дата сообщения: 15.05.2013 17:53
Про погрешность - не забываю (просто в потерянном "удачном" примере "испугало" расхождение в третьем знаке... Найти бы теперь этот пример). А также о различных эффектах оптимизатора.
Автор: unreal666
Дата сообщения: 12.07.2013 06:02
Вопрос по документированию:
есть типа такого

Код: class MyClass (object):

...

def fun1 (self):
...
if чего-то_здесь:
self.var1 = 1
else:
self.var1 = 2

def fun2 (self):
...
и_здесь_используется_переменная_var1
Автор: unreal666
Дата сообщения: 26.07.2013 02:08
корректно ли так замерять время выполнения кода ?

Код:
starttime = time.clock()
замеряемый код
mytime = time.clock() - starttime
Автор: Cheery
Дата сообщения: 26.07.2013 02:11
unreal666
да, а можно и так

Код: import timeit
start_time = timeit.default_timer()
# code you want to evaluate
elapsed = timeit.default_timer() - start_time
Автор: unreal666
Дата сообщения: 11.08.2013 10:07
Есть текст. Нужно заменить переносы строк (\n) на "<p>&nbsp;</p>" с такими условиями: "\n\n\n" заменяется на "<p>&nbsp;</p>", "\n\n\n\n" на "<p>&nbsp;</p><p>&nbsp;</p>", "\n\n\n\n\n" на "<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p> ". Т.е. кол-во "<p>&nbsp;</p>" меньше на 2, чем \n.
Как такое оптимальней сделать?
Автор: bomzhe
Дата сообщения: 11.08.2013 15:36
unreal666

Код: import re
def process(data):
return re.sub(r'\n+(?=\n\n)', lambda m: '<p>&nbsp;</p>' * len(m.group(0)), data)
Автор: unreal666
Дата сообщения: 11.08.2013 16:49
bomzhe
не подходит.
process('aaa\n\n\n\n\n') должен вывести 'aaa<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>', а выводит 'aaa<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>\n\n'.

Похоже надо так:

Код: import re
def process(data):
return re.sub(r'(\n+)\n\n', lambda m: '<p>&nbsp;</p>' * len(m.group(1)), data)
Автор: bomzhe
Дата сообщения: 11.08.2013 17:46
unreal666
И правда, невнимательно посмотрел условие. Остаётся подчистить результат от оставшихся единичных/двойных переносов ('foo\n\n\nbar\n\nspam\n42' -> 'foo<p>&nbsp;</p>bar\n\nspam\n42').
Автор: unreal666
Дата сообщения: 22.12.2013 01:39
как импортировать модуль/пакет с использованием import (не __import__), путь к которому содержит пробелы?
Автор: Cheery
Дата сообщения: 22.12.2013 01:46
unreal666
http://stackoverflow.com/a/9123555/1164491
Автор: unreal666
Дата сообщения: 22.12.2013 01:57
т.е. без __import__ никак
Автор: unreal666
Дата сообщения: 22.12.2013 04:01
как покороче способом проверить на наличие нужного пути в sys.path и, если этот путь отсутствует, добавить его в sys.path.
Автор: panda3
Дата сообщения: 23.12.2013 10:49
unreal666
Ну, например:

Код: if MyPath.upper() not in map(str.upper, sys.path):
    sys.path.append(MyPath)
Автор: dvs
Дата сообщения: 23.12.2013 11:35

Цитата:
if MyPath.upper() not in map(str.upper, sys.path):
sys.path.append(MyPath)


# в unix/linux/android/macos:
sys.path = list(set(sys.path + [my_path]))
Автор: unreal666
Дата сообщения: 25.12.2013 06:18
В классе есть такой метод:

Код:
class ИмяКласса (Какой-то объект):
_escape_html_table = {
ord('&'): u'&amp;',
ord('<'): u'&lt;',
ord('>'): u'&gt;',
#ord('"'): u'&quot;',
#ord("'"): u'&#39;',
}

...

def __escape_html(self, content, params_dict):
"""Преобразовать символы &, < и/или > в ссылки-мнемоники."""
_escape_html_table = self._escape_html_table

if ESCAPE_PARAM_NAME not in params_dict:
return content.translate(_escape_html_table)
else:
table = {}
escape = params_dict[ESCAPE_PARAM_NAME]
for char in escape:
ord_char = ord(char)
if ord_char in _escape_html_table:
table[ord_char] = _escape_html_table[ord_char]
return content.translate(table)

...
Автор: Jenyay
Дата сообщения: 25.12.2013 18:25
А стандартный cgi.escape не пойдет?
Автор: unreal666
Дата сообщения: 26.12.2013 00:23
cgi.escape минимум конвертирует <>&. А мне иногда нужно, чтобы <> оставались как есть.
Автор: unreal666
Дата сообщения: 08.03.2014 10:11
кто-нибудь пробовал поставить pywin32-218.win32-py2.7.exe ?
ставить как-то ставится, но с какой-то там ошибкой по части его dll-библиотек


Цитата:
Error installing pythoncom27.dll

If you have any Python applications running, please close them now
and select 'Retry'

Файл pythoncom27.dll ничем не занят.
Пытался зарегать (regsvr32) его вручную - не найдена точка входа.
Dependency Walker в таблице экспорта ф-ю DllRegisterServerEx видит. А вот прога PEinsigh вообще показывает, что она пустая.
Автор: bomzhe
Дата сообщения: 08.03.2014 12:27

Цитата:
win32

Ставил как-то lxml через pip. Установочник обнаружил на машине VS2010 и решил, значится, скомпилировать бинарники пакета через неё, с закономерным результатом. Решение нашлось на http://www.lfd.uci.edu/~gohlke/pythonlibs/ — собранные пакеты под win32/64.
Автор: unreal666
Дата сообщения: 08.03.2014 18:59
оттуда тоже скачал pywin32-218.5.win32-py2.7.exe . Один хрен библиотека не регается, но уже без этой ошибки.
То что не регается видно по отсутствию в реестре нужных ключей.
И еще забыл. Перед данной ошибкой вылазит ошибка

Цитата:
Runtime Error!

Program: C:\Download\pywin32-218.5.win32-py2.7.exe

R6034
An application has made an attempt to load the C runtime library incorrectly.
Please contact the application's support team for more information.

Страницы: 1234567891011

Предыдущая тема: Вопрос по HTML и MS IE Explorer6.0


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.