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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Python
все вопросы по 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

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

Adm10



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

Python


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

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

Всего записей: 35 | Зарегистр. 13-10-2006 | Отправлено: 15:48 16-06-2007 | Исправлено: Lin1980, 22:13 27-01-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 OK. Так нагляднее:
 
   Я печатаю в текстовом редакторе. Для создания новой строки я нажимаю клавишу 'Enter' один раз (в коде это записывается print(). Для создания двух новых строк (первая получается 'пустой') я нажимаю клавишу 'Enter' два раза (в коде это записывается print('\n'). Но не специалисту бывает трудно понять создаётся в каком-то месте перенос или нет. Поэтому практический приём таков: пишем сначала print(), если 'пустая' строка не создаётся, то меняем на print('\n').
 
   В указанном сценарии сделал так:

Код:
    print()  
    for clearkey in clearkeys:
        print(f"--key {clearkey['keyId']}:{clearkey['key']}", end='\n')
    print()
    print(decrypted_obj["playbackData"]["mediaPlaylistUrl"])

 
    Так меня устраивает.
 

Всего записей: 2722 | Зарегистр. 09-01-2010 | Отправлено: 02:14 25-12-2025 | Исправлено: LZAA, 11:56 25-12-2025
YuS_2



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

Цитата:
Поэтому практический приём таков: пишем сначала print()), если 'пустая' строка не создаётся, то меняем на print('\n')).

неверно...
для понимания:
1.

Код:
print(..., end=' ')

- здесь, явно задана замена символ конца/переноса строки. Если выполняется такая функция, то перевода строки после вывода не будет и следующая строка "склеится" с текущим выводом.
По умолчанию там то, что необязательно явно указывать: print(..., end='\n')
 
2.

Цитата:
print(f"--key {clearkey['keyId']}:{clearkey['key']}", end='\n')

Здесь нет необходимости явно указывать аргумент end='\n', он там по умолчанию присутствует, его указывают, если есть необходимость чем-либо его заменить.
 
3.  
В общем случае, такая запись:

Код:
print('\n')  

- эквивалентна:

Код:
print('\n', end='\n')

то есть два перевода строки, а именно: явно указанный перевод строки в виде текста и ещё один перевод строки добавляемый аргументом по умолчанию самой функцией print в конец вывода.
 

Цитата:
Так меня устраивает.

Это хорошо, что устраивает. Но Вы его проверили?
Там в цикле собиралась строка из ключей через пробел, то бишь в каждой итерации ключ добавлялся в одну строку, а теперь, после замены пробела на перевод строки, каждый ключ будет выводиться с новой строки - это то, что требовалось?
Я ведь не просто из любопытства просил полный код, с реальным выводом и с выводом который требуется...
 
Добавлено:
Mavrikii  Цитата

Цитата:
да там предыдущая строка же без переноса, а нужно два, вот и.

а, да, всё верно... там же в предыдущей строке
Код:
print(f"--key {clearkey['keyId']}:{clearkey['key']}", end=" ")
, вывод будет без переноса...
 
 
 
Добавлено:
LZAA

Цитата:
Запись 1 задаётся кодом - print(f"--key {clearkey['keyId']}:{clearkey['key']}", end=" ")
Запись 2 задаётся кодом - print(decrypted_obj["playbackData"]["mediaPlaylistUrl"])

А, вот теперь понятнее стало...
В целом, если я правильно понял, конечно, требуется примерно это:

Код:
 
# перевод строки после "Команда":
print()
# сборка, через пробел, строки "Запись 1":
for clearkey in clearkeys:
    print(f"--key {clearkey['keyId']}:{clearkey['key']}", end=' ')
 
# двойной перевод строки, для итогового разделения одной пустой строкой, после "Запись 1":
print('\n')
 
# вывод "Запись 2"
print(decrypted_obj["playbackData"]["mediaPlaylistUrl"])

 
Добавлено:
для наглядности, картинка:
 

Всего записей: 3270 | Зарегистр. 03-02-2009 | Отправлено: 09:32 25-12-2025 | Исправлено: YuS_2, 09:51 25-12-2025
LZAA

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

Цитата:
Цитата:
Поэтому практический приём таков: пишем сначала print()), если 'пустая' строка не создаётся, то меняем на print('\n')).
 
неверно...  

   Да - неверно. Но '))' - это опечатка. Не знаю, почему так вышло. Прошу прощения. В сообщении сейчас исправлено:

Цитата:
Поэтому практический приём таков: пишем сначала print(), если 'пустая' строка не создаётся, то меняем на print('\n').  

   Убрал из кода лишнее. Теперь так:

Код:
    print()  
    for clearkey in clearkeys:
        print(f"--key {clearkey['keyId']}:{clearkey['key']}")
    print()
    print(decrypted_obj["playbackData"]["mediaPlaylistUrl"])

  Это работает - получается две 'пустые' строки:
 
    Команда
 
    Запись 1
 
    Запись 2
 
   Код, понятное дело, не мой. Автор кода исходя из собственных соображений использует end=" " специально для того, чтобы 'Запись 1' создавалась одной строкой. Мне же удобнее вывод с переносом. Такие дела.
 

Всего записей: 2722 | Зарегистр. 09-01-2010 | Отправлено: 12:25 25-12-2025
YuS_2



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

Цитата:
Но '))' - это опечатка.

Да, но я не про неё говорил, а про общий подход к "практическому приему".
Метод "научного тыка" - не наш метод. Поэтому и расписал подробно и даже скрин сделал. То бишь, использовать необходимо так, как требует того необходимый результат.
 

Цитата:
Мне же удобнее вывод с переносом.

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

Код:
Запись 1

а:

Код:
Запись
1

- как-то так.

Всего записей: 3270 | Зарегистр. 03-02-2009 | Отправлено: 14:49 25-12-2025
MBK2

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

Всего записей: 5645 | Зарегистр. 18-09-2018 | Отправлено: 15:50 25-12-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
                    YuS_2
 
   'Screen' подвиг меня на такое:

Цитата:
    print();print(decrypted_obj["playbackData"]["mediaPlaylistUrl"]);print()
    for clearkey in clearkeys:
        print(f"{clearkey['keyId']}:{clearkey['key']}")

   Тоже неплохо.

Всего записей: 2722 | Зарегистр. 09-01-2010 | Отправлено: 16:11 26-12-2025
YuS_2



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

Цитата:
print();print(decrypted_obj["playbackData"]["mediaPlaylistUrl"]);print()

Это можно упростить

Код:
print(f'\n{decrypted_obj["playbackData"]["mediaPlaylistUrl"]}\n')

Всего записей: 3270 | Зарегистр. 03-02-2009 | Отправлено: 20:53 26-12-2025 | Исправлено: YuS_2, 20:53 26-12-2025
LZAA

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

    Это работает. Получается красиво. Спасибо.

Всего записей: 2722 | Зарегистр. 09-01-2010 | Отправлено: 21:39 26-12-2025
Mavrikii

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

Цитата:
 Это работает. Получается красиво.

print('\n', decrypted_obj["playbackData"]["mediaPlaylistUrl"], '\n', sep='')
print('\n' + decrypted_obj["playbackData"]["mediaPlaylistUrl"] + '\n')

Всего записей: 16935 | Зарегистр. 20-09-2014 | Отправлено: 06:12 27-12-2025 | Исправлено: Mavrikii, 06:12 27-12-2025
YuS_2



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

Цитата:
print('\n' + decrypted_obj["playbackData"]["mediaPlaylistUrl"] + '\n')

Такой вариант может не сработать, если вдруг вывод не текстовый...
 
Добавлено:
можно проверить:

Код:
a = [1]
b = [2]
c = a + b
print('\n' + c + '\n')

- должно быть исключение...

Всего записей: 3270 | Зарегистр. 03-02-2009 | Отправлено: 08:56 27-12-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
                     Mavrikii
                     YuS_2
 
    Сделал:
 
    print('\n'+decrypted_obj["playbackData"]["mediaPlaylistUrl"]+'\n')
 
    Работает. Это ещё проще. Спасибо.  
    Может быть в некоторых случаях это и не будет работать. Не беда - напишем другую команду.
 
     
 

Всего записей: 2722 | Зарегистр. 09-01-2010 | Отправлено: 11:50 27-12-2025
YuS_2



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

Цитата:
 Сделал:
...
Может быть в некоторых случаях это и не будет работать.

 
не "может быть", а именно не будет работать, если вывод команды не текстовый.
В общем, мое дело - предупредить... Ваше - отказаться.

Всего записей: 3270 | Зарегистр. 03-02-2009 | Отправлено: 14:47 27-12-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
           
Цитата:
мое дело - предупредить... Ваше - отказаться.

   Неее... Моя юдоль несколько иная. Я не программирую, но лишь иногда пытаюсь редактировать нужные мне сценарии. Не будет работать с + - буду использовать другой синтаксис.
   Я грешным делом подумал уж, что оптимизация кода благополучно закончена, но не тут-то было.
   Чтобы в начале строки не создавался пробел сделал так:

Код:
print('\n'+decrypted_obj["playbackData"]["mediaPlaylistUrl"],'\n')

   Код, правда, короче не становится. Только печатать немного легче.

Всего записей: 2722 | Зарегистр. 09-01-2010 | Отправлено: 15:48 27-12-2025 | Исправлено: LZAA, 16:17 27-12-2025
LZAA

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

   Посмотрите пожалуйста
Сценарий

Код:
TypeError: __init__() got an unexpected keyword argument 'firefox_binary'

   Это в коде ошибка или что-то другое? Можно ли это исправить и как?

Всего записей: 2722 | Зарегистр. 09-01-2010 | Отправлено: 14:24 08-01-2026
Mavrikii

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

Цитата:
Это в коде ошибка или что-то другое?

код для устаревшей версии селениума.
https://stackoverflow.com/questions/71452131/deprecationwarning-firefox-binary-has-been-deprecated-please-pass-in-a-service

Всего записей: 16935 | Зарегистр. 20-09-2014 | Отправлено: 19:12 08-01-2026
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
   'selenium' я 'понизил'. Но этого недостаточно. Ему ещё 'geckodriver' подавай. Это я сделал.  
    Но в сценарии не только 'selenium', но и 'google' старый.
 
    Некотрые участки кода с 'google'.
Участки кода
 
    Но сейчас:
 
    1. URL группы выглядит иначе:
 
        https://groups.google.com/forum/#!forum/mumbai-ultimate    ->
        https://groups.google.com/g/mumbai-ultimate
 
    2. URL сообщения выглядит иначе:
 
        https://groups.google.com/forum/message/raw?msg=id           ->
        https://groups.google.com/g/mumbai-ultimate/c/id
 
   Вопрос: какие именно правки надо внести в сценарий, чтобы он сейчас работал?
   В 'https://groups.google.com/forum/message/raw?msg=id' есть 'raw'. Все упоминания 'raw' в коде обусловлены этим или нет?

Всего записей: 2722 | Зарегистр. 09-01-2010 | Отправлено: 23:19 08-01-2026 | Исправлено: LZAA, 23:35 08-01-2026
Mavrikii

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

Цитата:
'selenium' я 'понизил'. Но этого недостаточн

зачем? дал же ссылку как исправить под современную версию
 

Цитата:
URL группы выглядит иначе

тут куски кода, нет всего.
 
1) заменить тут

Цитата:
forum_url = 'https://groups.google.com/forum/#!forum/mumbai-ultimate'

 
2)
Цитата:
URL сообщения выглядит иначе:

зависит от того, как код вытаскивает их их страницы.
 

Цитата:
Все упоминания 'raw' в коде обусловлены этим или нет?

вы вообще питон не читаете?
 
нет, только тут, где формируется URL ветки

Цитата:
    def _get_raw_url(self, thread_url, message_id):
        """ Return the raw url given the thread_url and the message_id. """
 
        _, group, thread_id = thread_url.rsplit('/', 2)
        url_fmt = 'https://groups.google.com/forum/message/raw?msg=%s/%s/%s'
 
        return url_fmt % (group, thread_id, message_id)

но теперь это делается иначе, и id является уникальный идентификатор, который нужно доставать из страницы.

Всего записей: 16935 | Зарегистр. 20-09-2014 | Отправлено: 23:30 08-01-2026 | Исправлено: Mavrikii, 23:39 08-01-2026
LZAA

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

    Сначала я сделал по-быстрому, чтобы посмотреть будет ли работать.
    Редактирование под актуальный 'selenium' я тоже попробую сделать.
     
    Сейчас адрес сообщения (например) такой:
 
    https://groups.google.com/g/mumbai-ultimate/c/UfFvrAnG2Vg
 
    Насколько я понимаю, для получения этого 'UfFvrAnG2Vg' существующий сценарий надо существенно перерабатывать.
    Вопрос: если это сделать, то он будет делать то, для чего написан?

Всего записей: 2722 | Зарегистр. 09-01-2010 | Отправлено: 23:55 08-01-2026
Mavrikii

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

Цитата:
Вопрос: если это сделать, то он будет делать то, для чего написан?

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

Всего записей: 16935 | Зарегистр. 20-09-2014 | Отправлено: 00:05 09-01-2026
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
     Некоторые вопросы 'всвязи'.
 
      1. Сценарий я изменил для актуального 'selenium'.
 
         Код: driverService = Service('/path/to/geckodriver')
 
         Вопросы:
 
      a) Можно ли сделать так, чтобы сценарий 'path' из 'Переменных сред' брал?
      b) '/path/to/geckodriver' можно записать. Но в некоторых деректориях 'не может расшифровать'. Это наблюдается только для путей с 'C:'. Например:

Код:
ScrapeGoogleGroups
  File "C:\Users\X\Desktop\x\ScrapeGoogleGroups.py", line 87
    driverService = Service('C:\Users\geckodriver.exe')
                            ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

       Когда-то с таким уже сталкивался. Можно ли это 'побороть'?
 
    2. 'Headless Firefox'.
        https://www.zenrows.com/blog/firefox-headless#start
        Я сценарий изменил, но
 
# the target website  
url = "xxxxx"
 
    не использовал. Но при работе сценария GUI (окно) всё равно появляется. Можно ли сделать, чтобы 'headless' всё же работало?
 
    3. option.binary_location = 'path to Firefox exe'
 
       Если browser 'Firefox' установлен в системе, то это работает.
       Но для портабельного 'Firefox' если использовать будь то 'launcher.exe' или же 'напрямую' 'firefox.exe', то сценарий пишет:
 
    File "D:\Program Files\Python 3.8\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 232, in check_response
      raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidArgumentException: Message: binary is not a Firefox executable  
 
    Мне кажется, что вряд ли это можно 'обойти'. Но всё же спрошу - возможно ли использовать portable 'Firefox'?    
       

Всего записей: 2722 | Зарегистр. 09-01-2010 | Отправлено: 03:38 09-01-2026 | Исправлено: LZAA, 03:40 09-01-2026
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

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


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

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

LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

Рейтинг.ru