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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

Adm10



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

Python


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

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

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

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

Цитата:
Python 3.11.1 под Win 7 не работает ?????

Ещё с 3.9.x...
Читайте описания версий https://www.python.org/downloads/windows/

----------
http://www.imho.ws

Всего записей: 2403 | Зарегистр. 12-10-2006 | Отправлено: 17:37 21-12-2022
NiXXX



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
 
У меня есть список: [[Иванов, слесарь, 5 разряд],[Петров, токарь, 1 разряд],[Сидоров, директор, без разряда]]. Мне надо вывести построчно в файл в виде:
"Иванов", "слесарь", "5 разряд"
"Петров", "токарь", "1 разряд"
"Сидоров", "директор", "без разряда"
 
У меня получается вывести в файл, но в виде ['Сидоров', 'директор', 'без разряда']...

Всего записей: 365 | Зарегистр. 06-05-2003 | Отправлено: 14:59 29-12-2022 | Исправлено: NiXXX, 15:02 29-12-2022
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, NiXXX
1. Использовать join
2. Использовать CSV

Цитата:
arr = [["Иванов", "слесарь", "5 разряд"],["Петров", "токарь", "1 разряд"],["Сидоров", "директор", "без разряда"]]
with open('out1.txt', 'w') as f:
  for row in arr:
    f.write ('"' + '", "'.join(row) + '"\n')
 
import csv
with open('out2.txt','w', newline='') as f:
    csvw = csv.writer(f,delimiter=',', quoting=csv.QUOTE_ALL)
    for row in arr:    
      csvw.writerow(row)


Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 17:38 29-12-2022
NiXXX



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

Цитата:
1. Использовать join

Спасибо! Работает!
 

Цитата:
2. Использовать CSV

Честно пытался, но PyCharm отказывается устанавливать csv, выдает ошибку "Could not find a version that satisfies the requirement csv (from versions: none)".
 
Пока бился с этой задачей, подвезли еще одну
Есть два списка и их надо сравнить:
1. [[Иванов, слесарь, 5 разряд],[Петров, токарь, 1 разряд],[Сидоров, директор, без разряда]]
2. +/- такой же, но получен запросом из Postgres, выглядит так [(Иванов, слесарь, 5 разряд), (Петров, токарь, 1 разряд), (Сидоров, директор, без разряда)].
 
По содержанию списки совпадают, по формату - нет, а сравнить их надо.
Делаю list.replace('(', '').replace(')', '') - скобки заменяются на ". Что делать?..

Всего записей: 365 | Зарегистр. 06-05-2003 | Отправлено: 11:54 30-12-2022 | Исправлено: NiXXX, 11:56 30-12-2022
Alex_Piggy

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

Цитата:
PyCharm отказывается устанавливать csv

Потому что csv - это встроенный модуль? Его не нужно устанавливать.
 

Цитата:
По содержанию списки совпадают, по формату - нет, а сравнить их надо.

Привести их к единому формату. Один - это list of list, второй - list of tuples. Бинарно сравнивать удобнее всего вообще в set of tuples.

Цитата:
 
list1 = [["Иванов", "слесарь", "5 разряд"],["Петров", "токарь", "1 разряд"],["Сидоров", "директор", "без разряда"]]
list2 = [("Иванов", "слесарь", "6 разряд"),("Петров", "токарь", "1 разряд"),("Сидоров", "директор", "Без разряда")]
set1 = set([tuple(x) for x in list1])
set2 = set(list2)
print (set1.intersection(set2)) # intersection
print (set1.difference(set2)) # difference
print (set1.symmetric_difference(set2)) # symmetric_difference

UPD: Я дал ссылки на версию python, которая для меня основная. Смотрите справку по той, которая стоит у Вас.

Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 12:22 30-12-2022 | Исправлено: Alex_Piggy, 12:25 30-12-2022
NiXXX



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

Цитата:
Потому что csv - это встроенный модуль? Его не нужно устанавливать.

Все бы ничего, но он почему-то не импортируется...
 

Цитата:
Привести их к единому формату. Один - это list of list, второй - list of tuples. Бинарно сравнивать удобнее всего вообще в set of tuples.

Земной поклон!

Всего записей: 365 | Зарегистр. 06-05-2003 | Отправлено: 14:52 30-12-2022 | Исправлено: NiXXX, 15:09 30-12-2022
Nick3230

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
Нужна помощь в исправлении ошибок в скачанном мной скрипте. (Вот этот скрипт "simpleNotification.py" нужен для работы дополнения "Scriptable Notifications" для Mozilla Thunderbird).
Насколько я понял, то сначала нужно заменить большую букву на маленькую в строке "from Tkinter import *" на "from tkinter import *". А вот, что ещё нужно сделать, чтобы этот скрипт заработал - не знаю. Подскажите, кто знает, пожалуйста, исправленный вариант этого скрипта...
 
 
Сам скрипт: Скрипт "simpleNotification.py"
 
P.S. Система Win11, Python 3.11.2 (x64)
 
 

Всего записей: 200 | Зарегистр. 05-12-2006 | Отправлено: 12:32 28-02-2023
Mavrikii

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

Цитата:
в строке "from Tkinter import *" на "from tkinter import *".

заменить строки (понятно какие) на  

Код:
from tkinter import *
from tkinter import messagebox
 
window.geometry("1x1+"+str(int(window.winfo_screenwidth()/2))+"+"+str(int(window.winfo_screenheight()/2)))
messagebox.showinfo(title="Scriptable Notifications", message=msg)

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

Всего записей: 15108 | Зарегистр. 20-09-2014 | Отправлено: 02:55 01-03-2023 | Исправлено: Mavrikii, 02:55 01-03-2023
msmih



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужна подсказка.
Есть простенький asyncio server, взятый из официальной документации

Код:
import asyncio
 
 
class EchoServerProtocol(asyncio.Protocol):
    def connection_made(self, transport):
        peername = transport.get_extra_info('peername')
        print('Connection from {}'.format(peername))
        self.transport = transport
 
    def data_received(self, data):
        message = data.decode()
        print('Data received: {!r}'.format(message))
 
        print('Send: {!r}'.format(message))
        self.transport.write(data)
 
        print('Close the client socket')
        self.transport.close()
 
 
async def main():
    # Get a reference to the event loop as we plan to use
    # low-level APIs.
    loop = asyncio.get_running_loop()
 
    server = await loop.create_server(
        lambda: EchoServerProtocol(),
        '127.0.0.1', 8888)
 
    async with server:
        await server.serve_forever()
 
 
asyncio.run(main())

 
адрес документации
 
На этот сервер посылаю достаточно большие данные-запросы.
Сервер на приеме обрезает данные. Как можно реализовать чтение всех данных до конца?

Всего записей: 1192 | Зарегистр. 29-01-2006 | Отправлено: 10:44 05-03-2023
Mavrikii

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

Цитата:
Сервер на приеме обрезает данные. Как можно реализовать чтение всех данных до конца

потому что размер буфера ограничен
 

Цитата:
        print('Close the client socket')
        self.transport.close()

зачем? а если данные идут дальше?
 

Цитата:
data_received - Вызывается при получении некоторых данных. data — это непустой байтовый объект, содержащий входящие данные.
 
Будут ли данные буферизованы, разбиты на фрагменты или собраны заново, зависит от транспорта. В общем, вы не должны полагаться на конкретную семантику, а вместо этого сделать свой синтаксический анализ универсальным и гибким. Однако данные всегда принимаются в правильном порядке.
 
Метод можно вызывать произвольное количество раз, пока соединение открыто.

 
закрывать нужно по обрыву или по eof_received()
 
ну или если получили команду в данных об окончании обмена.

Всего записей: 15108 | Зарегистр. 20-09-2014 | Отправлено: 11:04 05-03-2023 | Исправлено: Mavrikii, 11:11 05-03-2023
msmih



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть еще вопрос. Все тот же пример, что и выше
Получаю данные
 

Цитата:
        message = data.decode()
 

Пытаюсь их прогнать через regexp, что-то типа так
message=re.sub(r'(\<(/?[^>]+)>)', '', message)
 
Regexp не срабатывает. Не понимаю где проблема.
 
Для проверки делаю print (message). Копи-паст вывод принта в другой тестовый файл, прогоняю regexp
message=re.sub(r'(\<(/?[^>]+)>)', '', message)
Все работает.
 
Где может быть проблема после получения данных?

Всего записей: 1192 | Зарегистр. 29-01-2006 | Отправлено: 11:17 07-03-2023 | Исправлено: msmih, 11:20 07-03-2023
Mavrikii

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

Цитата:
message = data.decode()

в какой кодировке данные?  
 
decode преобразует бинарные в строку соответствующей кодировки.
файл .py внутри в какой кодировке?

Всего записей: 15108 | Зарегистр. 20-09-2014 | Отправлено: 11:32 07-03-2023
fscpsd



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
А у бинарных разве бывает кодировка?

Всего записей: 1835 | Зарегистр. 16-09-2010 | Отправлено: 11:54 07-03-2023
msmih



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

Цитата:
в какой кодировке данные?  

все utf8.
Указал явно message = data.decode("utf-8") - не решило проблему.
Ума не приложу, что происходит.

Всего записей: 1192 | Зарегистр. 29-01-2006 | Отправлено: 11:58 07-03-2023
Mavrikii

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

Цитата:
Указал явно message = data.decode("utf-8") - не решило проблему.

у вас данные в каком виде приходят?
 

Цитата:
str.encode(encoding='utf-8', errors='strict')
Return the string encoded to bytes.

 

Цитата:
bytes.decode(encoding='utf-8', errors='strict')
bytearray.decode(encoding='utf-8', errors='strict')
Return the bytes decoded to a str.
 
encoding defaults to 'utf-8'; see Standard Encodings for possible values.


Всего записей: 15108 | Зарегистр. 20-09-2014 | Отправлено: 12:15 07-03-2023 | Исправлено: Mavrikii, 12:15 07-03-2023
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеется json-файл такого вида
 
[
  {
    "id": "1",
    "name": "name1"
  },
  {
    "id": "2",
    "name": "name2"
  },
  {
    "id": "3",
    "name": "name3"
  }
]
 
Необходимо вывести все значения по ключу id, разделенные запятыми.
 
1,2,3
 
Через jq это можно сделать командой jq -r 'map(.id) | join(",")'
Как сделать то же самое в Python ?

Всего записей: 4942 | Зарегистр. 05-01-2006 | Отправлено: 23:34 20-03-2023
Mavrikii

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

Код:
import json
 
with open('data.json') as f:
    data = json.loads(f.read())
    print(', '.join([el['id'] for el in data]))

Всего записей: 15108 | Зарегистр. 20-09-2014 | Отправлено: 23:38 20-03-2023
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Благодарю за молниеносный ответ !
А если нужно сформировать эту строку и передать в другой запрос ? Вроде такого
 
result = request.get(output="extend", ids=[1, 2, 3])
 
Как это сделать корректно ?

Всего записей: 4942 | Зарегистр. 05-01-2006 | Отправлено: 00:14 21-03-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1
result = request.get(output="extend", ids=[el['id'] for el in data])

Всего записей: 15108 | Зарегистр. 20-09-2014 | Отправлено: 00:25 21-03-2023
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Еще раз спасибо за подсказки.
 
Как сделать тоже самое, но когда нужно извлечь элементы из разных json-файлов одинаковой структуры ?
Я пробовал конструкцию  
 
el['id'] for el in data1,data2
 
но Питон такой синтаксис не понимает.
 
Добавлено:
Вроде вот так работает
 
el['id'] for el in (data1+data2)

Всего записей: 4942 | Зарегистр. 05-01-2006 | Отправлено: 13:13 30-03-2023
Открыть новую тему     Написать ответ в эту тему

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

Компьютерный форум 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