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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

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

Adm10



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

Python


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

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

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

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

Цитата:
При этом к данным добавляются символы 'CRLF' или 'CR'. Подозреваю, что это OS для чего-то делает.

ос не делает, пишет то, что выводите. я не знаю что делает ваш скрипт.
когда вы делаете print в окне консоли, то питон сам определяет в какой ОС он запущен и выводит перенос строки либо как \n, либо как \r\n
если хочется один к однму, то файл для записи нужно открывать не как w, а как wb
https://docs.python.org/3/library/functions.html#open
либо указывать newline='\n' или newline='' у функции open

Цитата:
newline определяет, как анализировать символы новой строки из потока. Это может быть None, '', '\n', '\r', и '\r\n'. Работает следующим образом:
 
При чтении ввода из потока, если newline равен None, включается режим универсальных новых строк. Строки во вводе могут заканчиваться на '\n', '\r'или '\r\n', и они переводятся в '\n'перед возвратом вызывающей стороне. Если равен '', включается режим универсальных новых строк, но окончания строк возвращаются вызывающей стороне непереведенными. Если он имеет любое из других допустимых значений, строки ввода завершаются только указанной строкой, а окончание строки возвращается вызывающей стороне непереведенным.
 
При записи вывода в поток, если newline равен None, любые '\n' записанные символы преобразуются в системный разделитель строк по умолчанию, os.linesep. Если newline равен ''или '\n', преобразование не выполняется. Если newline равен любому из других допустимых значений, любые '\n' записанные символы преобразуются в заданную строку.

 

Цитата:
то 'out.txt' создаётся, но он 'пустой'. То есть данные из stdout не сохраняются.

показывайте весь код.

Всего записей: 16017 | Зарегистр. 20-09-2014 | Отправлено: 22:54 27-02-2025 | Исправлено: Mavrikii, 23:10 27-02-2025
LZAA

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

           Некоторые соображения.
        Если выполнить:
        curl URL > x.txt
        то 'x.txt' получается с 'кареткой'.
        Если выполнить:
        curl URL -o x.txt
        то 'x.txt' получается без 'каретки'.  
   Если предположить, что OS здесь 'ни причём', то выходит так, что 'curl.exe' выводит данные в консоль так, а сохраняет данные в файл эдак. Довольно странное поведение. Но так или иначе для исполняемых файлов эта задача в общем виде решена.
        Хочется и для сценариев Python найти решение. Я по простоте душевной расчитывал на универсальное решение для того, чтобы я сам мог в случае необходимости редактировать имеющийся сценарий. Сейчас же мне кажется, что так не получится. Тогда придётся пробовать найти частное решение. Код (для примера):
 

Код:
import argparse
import re
 
def hextorgb(candidate):
    # if the first character is a hash then remove it
    if candidate.startswith("#"):
        candidate = candidate[1:]
 
    # check the value is in a valid format
    if is_hex(candidate):
        red = int(candidate[0:2], 16)
        green = int(candidate[2:4], 16)
        blue = int(candidate[4:6], 16)
        return (red, green, blue)
    else:
        return -1
 
def is_hex(val):
    pattern = re.compile("[0-9A-Fa-f]{6}")
    if pattern.fullmatch(val) is None:
        return False
    return True
 
if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Get RGB from Hex.')
    parser.add_argument('hex', type=str, help='The hex value.')
    args = parser.parse_args()
    print("{} is {}".format(args.hex, hextorgb(args.hex)))

 
    Как это можно сохранить в файл?

Всего записей: 2447 | Зарегистр. 09-01-2010 | Отправлено: 00:06 28-02-2025
Mavrikii

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

Цитата:
Довольно странное поведение.

при чем тут тема о питоне? и ничего странного нет.
по умолчанию идет вывод в консоль, программа знает, что работает в Windows, и, чтобы отобразился перенос строки, то его нужно вывести как в Windows. с -o он просто тупо пишет в файл, ничего не преобразовывая. делает это сама программа, а не ОС.
 

Цитата:
Как это можно сохранить в файл?

в чем сложность тут?
 

Цитата:
>python py.py ffffff
ffffff is (255, 255, 255)

 

Цитата:
>python py.py ffffff > out.txt
>cat out.txt
ffffff is (255, 255, 255)

Всего записей: 16017 | Зарегистр. 20-09-2014 | Отправлено: 00:33 28-02-2025 | Исправлено: Mavrikii, 00:37 28-02-2025
LZAA

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

       Сложность в том, что в созданном файле 'out.txt' записан перенос строки. А нужно, чтобы создавался файл без записанного переноса строки.

Всего записей: 2447 | Зарегистр. 09-01-2010 | Отправлено: 01:17 28-02-2025
Mavrikii

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

Цитата:
 Сложность в том, что в созданном файле 'out.txt' записан перенос строки. А нужно, чтобы создавался файл без записанного переноса строки.

потому что print, по умолчанию, добавляет в конце перенос строки.
print("{} is {}".format(args.hex, hextorgb(args.hex)), end='')

Всего записей: 16017 | Зарегистр. 20-09-2014 | Отправлено: 01:49 28-02-2025
LZAA

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

      Алилуйя! Наконец-то разобрались!
      ', end=''' - это то, что надо. Спасибо за помощь.

Всего записей: 2447 | Зарегистр. 09-01-2010 | Отправлено: 02:17 28-02-2025
MBK2

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

Цитата:
то 'out.txt' создаётся, но он 'пустой'.  

Так вы забыли вторым параметром print файл добавить

Всего записей: 5192 | Зарегистр. 18-09-2018 | Отправлено: 08:39 28-02-2025 | Исправлено: MBK2, 08:39 28-02-2025
LZAA

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

        Вы правы - я что-то не так сделал. Но я пробовал разные варианты кода.
       Например:
 
       
Код:
with open('out.txt', 'w'):
         print(decrypt_key(x), file)

 
      но так не работает. Хотелось бы, всё таки с созданием файла разобраться. Ведь именно об этом я изначально спрашивал.

Всего записей: 2447 | Зарегистр. 09-01-2010 | Отправлено: 16:33 28-02-2025
U235

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LZAA
вам уже говорили как надо:
 
 
with open('out.txt', 'w') as f:
    print(f"The time now is:  {current_time}", file=f)  # Python 3.x
 

Всего записей: 995 | Зарегистр. 14-12-2005 | Отправлено: 17:42 28-02-2025
LZAA

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

    Мне уже говорили и я уже это делал - файл 'out.txt' получается 'пустой'.

Всего записей: 2447 | Зарегистр. 09-01-2010 | Отправлено: 18:52 28-02-2025
U235

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LZAA у меня все работает. Может у вас ОС или другая поограмма этот файл блокируют? попробуйте другое имя ради интереса.
Ошибки пишет какие-нибудь?
С отступами не напутали? Для Python отступы очень важны.

Всего записей: 995 | Зарегистр. 14-12-2005 | Отправлено: 18:58 28-02-2025 | Исправлено: U235, 19:00 28-02-2025
MBK2

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

Цитата:
 
with open('out.txt', 'w'):
         print(decrypt_key(x), file)
 

Да нет, вот так пробовали?

Код:
 
with open('out.txt', 'w') as f:
         print(decrypt_key(x), file=f)
 

Всего записей: 5192 | Зарегистр. 18-09-2018 | Отправлено: 19:46 28-02-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
                              U235
        Наверное я вспешке код не совсем верно редактировал. Но сейчас опять проверил сценарий с:
         
       
Код:
with open('out.txt', 'w') as f:
    print(f"The time now is:  {current_time}", file=f)

 
    и файл 'out.txt' сохранился с данными.
 
                               MBK2
 
       
Код:
with open('out.txt', 'w') as f:
    print(decrypt_key(x), file=f)

 
      Да - такой код работает. Единственное усовершенствование (для моих нужд) такое:
 
     
Код:
with open('out.txt', 'w') as f:
    print(decrypt_key(x), end='', file=f)
 

 
       Ещё так можно сделать:
 
       
Код:
with open('out.txt', 'w') as f:
    f.write (decrypt_key(x))

 
      Это вообще красиво! Данные сразу сохраняются без 'каретки'.  
      Теперь можно сказать, что все вопросы решены. Спасибо всем за помощь и терпение.

Всего записей: 2447 | Зарегистр. 09-01-2010 | Отправлено: 21:25 28-02-2025 | Исправлено: LZAA, 22:16 28-02-2025
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru