Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Python

Kategoria: Technologia

Dla programistów Python

  • 342 członków
  • 45 wpisów

Fanatyk

w Python

30piorunów

W Pythonie 3.14 moduł http.server otrzymał w końcu natywną obsługę HTTPS.

https://docs.python.org/3/library/http.server.html#cmdoption-http.server-tls-cert

Teraz dzięki poniższej komendzie można na szybko wystawić stronę na świat lub podzielić się plikami z innymi korzystając z zaszyfrowanego połączenia:

> python -m http.server 8080 \
>
> --tls-cert <*.crt> \
>
> --tls-key <*.key> \
>
> -d <directory>

Fanatyk5piorunów

@koszotorobur będą używać tylko do lokalnego deploymentu? Prawda? ( ͡° ͜ʖ ͡°)

Pokaż więcej komentarzy (10)

Gruba ryba

w Python

8piorunów

Poprawiłem sobie wykresik bilansu energii dla mojego gospodarstwa domowego, jestem z siebie dumny więc wrzucam żeby się pochwalić

KOD:

#!/usr/bin/env python3
import psycopg
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.patches import Patch

# ---- KONFIGURACJA BAZY ----
DB_NAME = "rachunki_prad"
DB_USER = "raport_reader"
DB_PASSWORD = "bezpieczne_haslo"
DB_HOST = "192.168.123.11"
DB_PORT = "5432"

# ---- POŁĄCZENIE Z BAZĄ ----
conn = psycopg.connect(
   dbname=DB_NAME,
   user=DB_USER,
   password=DB_PASSWORD,
   host=DB_HOST,
   port=DB_PORT
)

# ---- POBRANIE SUM MIESIĘCZNYCH ----
query = """
SELECT
   to_char(date_trunc('month', date), 'YYYY-MM') AS month,
   SUM(b0 + b1 + b2 + b3 + b4 + b5 + b6 + b7 + b8 + b9 + b10 + b11 +
       b12 + b13 + b14 + b15 + b16 + b17 + b18 + b19 + b20 + b21 + b22 + b23) AS total_bilans
FROM energy_balance
GROUP BY month
ORDER BY month;
"""

df = pd.read_sql(query, conn)
conn.close()

# ---- PRZYGOTOWANIE DANYCH ----
df["month"] = pd.to_datetime(df["month"], format="%Y-%m")
df = df.set_index("month").sort_index()

# przelicz Wh → kWh i odwróć znak (żeby dodatni bilans był produkcją nad osią)
df["total_bilans"] = -(df["total_bilans"] / 1000)

# ---- UZUPEŁNIENIE BRAKUJĄCYCH MIESIĘCY ----
full_index = pd.date_range(df.index.min(), df.index.max(), freq="MS")
df = df.reindex(full_index, fill_value=0)
df.index = df.index.strftime("%Y-%m")

# ---- WYKRES ----
fig, ax = plt.subplots(figsize=(13, 12))  # 2x wyższy wykres

colors = df["total_bilans"].apply(lambda x: "green" if x >= 0 else "red")
bars = df["total_bilans"].plot(kind="bar", color=colors, ax=ax)

# linia zerowa
ax.axhline(0, color="black", linewidth=1.0)

# :white_check_mark: Siatka pozioma i pionowa
ax.grid(True, axis="y", linestyle="--", linewidth=0.5)
ax.grid(True, axis="x", linestyle="--", linewidth=0.3, alpha=0.3)
ax.set_axisbelow(True)

# :white_check_mark: Tło dla parzystych lat
for i, label in enumerate(df.index):
   year = int(label[:4])
   if year % 2 == 0:  # parzysty rok
       ax.axvspan(i - 0.5, i + 0.5, color='lightgray', alpha=0.2)

# opisy i tytuł
ax.set_xlabel("Miesiąc")
ax.set_ylabel("Bilans energii [kWh]")
ax.set_title("Miesięczny bilans energii")

# legenda
from matplotlib.patches import Patch
legend_elements = [
   Patch(facecolor="green", label="Nadwyżka produkcji"),
   Patch(facecolor="red", label="Nadwyżka zużycia")
]
ax.legend(handles=legend_elements, loc="upper left")

plt.xticks(rotation=45, ha="right")
plt.tight_layout()

plt.savefig("raport_miesieczny_bilans.png", dpi=150)
plt.show()

Osobistość1piorunów

@StepujacyBudowlaniec Ale skok w 2025 z nadwyżką. Dodałeś nowe panele czy pogoda u Ciebie była aż tak korzystna?

Pokaż więcej komentarzy (2)

Fanatyk

w Python

25piorunów

Nie używałem dużo Pyhonowskiego REPL - ale teraz jak ma już na Linuksie kolorowanie błędów i można z niego wyjść za pomocą exit lub quit (chociaż CTRL + D działało odkąd pamiętam :stuck_out_tongue_winking_eye:) to chyba zacznę :thinking_face:

Tutaj więcej info o zmianach w REPL, które przyniósł Python 3.13:

* Dane wyjściowe do konsoli mają teraz domyślnie włączony kolor.
Interaktywną przeglądarkę pomocy pydoc można otworzyć, naciskając F1*.
Możesz przeglądać historię wiersza polecenia za pomocą F2*.
Możesz łatwiej wkleić duże bloki kodu, naciskając F3*, aby włączyć specjalny tryb wklejania bloków.
Możesz po prostu wpisać exit lub quit, zamiast exit() lub quit(), aby opuścić REPL*.

Należy pamiętać, że te ulepszenia są obecnie dostępne tylko w systemach Linux i macOS. Nie są one dostępne w systemie Microsoft Windows, nawet w przypadku korzystania z nowego terminala systemu Windows.

GURU1piorunów

Hello skrypcie koszotorobura!✋

Gruba ryba1piorunów

Za próbę użycia `print` jako wyrażenie, a nie funkcję interpreter powinien przypominać, który jest rok i kiedy Py2 miał swój EoL.

Pokaż więcej komentarzy (6)

Osobistość

w Python

17piorunów

Napisałem tak dobre skrypty pod siebie, że aż muszę się pochwalić :smiley:
Skrypt przekształca video plik mkv wyodrębniając jego dźwięk.
a następnie na jego podstawie jest robiony plik txt co kto tam mówi :smiley:

po co to, komu zapytacie...
Byłem na szkoleniu, które mam nagrane i teraz sam będę prowadzić takie szkolenia :smiley:
więc w ramach notatek :grinning:

Autorytet0piorunów

Nice

Pokaż więcej komentarzy (8)

Mocarz

w Python

3piorunów

Napisałem sobie taki krótki program do robienia zdjęć z kamerki, gdzie potem sklejam z tego timelapse, ale nie rozumiem jednej rzeczy - zdjęcia zapisują się... z opóźnieniem. Musiałem dolać ukorzeniacza do awokado, więc zabierałem je sprzed kamerki. Po skończonej robocie (9:47) usiadłem do kompa i sprawdziłem poprzednie zdjęcia czy ustawiłem rośliny w miarę w tych samych miejscach. A tu się okazuje, że zdjęcie które powinno być zrobione w momencie skończenia, to tak naprawdę zdjęcie sprzed kilku minut. Łącznie zajęło mu 8 minut (5 zdjęć), zanim dotarł do momentu w którym skończyłem. Dlaczego tak jest? Czegoś tu nie rozumiem?
Kod:
>import cv2
>from time import sleep
>from datetime import datetime
>
>cam = cv2.VideoCapture(0)
>cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080.0)
>cam.set(cv2.CAP_PROP_FRAME_WIDTH, 1920.0)
>cam.set(cv2.CAP_PROP_AUTO_WB, 0.0)
>cam.set(cv2.CAP_PROP_WB_TEMPERATURE, 7000)
>cam.set(cv2.CAP_PROP_SATURATION, 75)
>cam.set(cv2.CAP_PROP_CONTRAST, 100)
>while True:
>   retval, frame = cam.read()
>   dt = datetime.now()
>   ts = int(datetime.timestamp(dt))
>   if retval != True:
>      print(str(dt) + ": Can't read frame")
>      sleep(5)
>      continue
>   cv2.imwrite(str(ts) + '.png', frame)
>   print(str(dt) + ": saved img " + str(ts) + ".png")
>   sleep(120)

Inspirator0piorunów

@Bielecki cv2 działa bardzo wolno. Spróbuj z numpy.
Jesli dobrze pamiętam, z obiektu cv2 można wyciągnąć tablicę numpy i za jego pomocą to zapisać do pliku.

Mocarz2piorunów

@markxvyarov dlaczego tak uważasz? Jeśli retval będzie false, to kontynuuję loop, żeby nie wywalać całego programu, ale nie zapisuję obrazu

@Prucjusz najwolniejsze w opencv w moim przypadku jest inicjalizowanie kamery przez cv2.VideoCapture(0). Ja loopuję się już po inicjalizacji, nie zwalniam kamery. Sam zapis odbywa się w ciągu ~0,1s, zakładając że sleep trwa równe 120s (takie mam różnice w timestampach).

@psalek dzięki, to mi wiele powiedziało. Wygląda na to że to właśnie bufor. Niby mogę zastosować te rozwiązania (choć porzucanie ramek przez opencv z tego co znalazłem odbywa się poprzez ustawianie odpowiednich properties kamery i nie jestem pewien czy 1. jest to wspierane przez mój model, 2. jest to nadal w opencv, bo gdzieś była wzmianka, że to usunęli), ale to w sumie byłaby sztuka dla sztuki - a w moim przypadku rozwiązanie się w sumie sprawdza. Zwyczajnie mnie ciekawiło dlaczego tak się dzieje i mam odpowiedź. Dzięki :smiley:

Pokaż więcej komentarzy (7)

Twórca

w Python

5piorunów

W pracy, udało nam się przepisać celery z Pythona na nasz własny menedżer tasków w Rust.
Wydajność jest zauważalnie lepsza, bo korzystamy ze starych komponentów i tam różnice są o wiele bardziej widoczne, niż na zwykłym komputerze, gdzie oba rozwiązania przetwarzają zadania niemal natychmiast.

Zatem mamy część z kodem w Rust, ale ciągle część z obliczeń musimy wykonać w pojedynczym procesie pythona do którego wysyłamy resty z zapytaniami.
Jednak celery miało jeden duży plus - uruchamiało się jako osobne procesy(co wydłużało o kilka sekund proces uruchamiania programu), dzięki czemu operacje numpy/scipy na CPU, były ładnie rozdzielane po stronie pythona na wszystkie wątki(na urządzeniu są 4 rdzenie i tyle samo procesów celery było uruchamianych)

Operacje obliczania statystyk(mowa o powyższym zadaniu korzystającym z numpy/scipy) są często zlecane w większej ilości na raz, dlatego ważne jest by to zrównoleglić.
Próbowałem robić to przez proste rozdzielanie tasków na wiele wątków, jednak, czasy bywały nawet czasami gorsze, niż jak robiłem to w jednym wątku - domyślam się że to wina GIL i tego że nie działa zbytnio dobrze, gdy wątki wykonują masę rzeczy na cpu.
Drugim problemem jest to że w przypadku równoległych działań wyskakują dziwne ostrzeżenia, przez co myślę że np. matplotlib, nie jest przystosowany do działania z wielu wątków(mimo że zadania które wykonuję od początku do końca działają tylko w jednym wątku), bo przechowuje globalnie jakieś parametry ze swoim stanem.

Kojarzycie, w jaki sposób, mógłbym w miarę prosto, móc wykonywać te obliczenia po stronie pythona na wielu wątkach?

Kosmonauta2piorunów

@qarmin jest standardowy moduł w Pythonie, nazywa się multiprocessing. W nim znajdziesz Pool i metody typu starmap i map. Najczęściej z tego korzystam gdy trzeba zrównoległość obliczenia.

https://superfastpython.com/multiprocessing-pool-map/
># SuperFastPython.com
># example of parallel map() with the process pool
>from random import random
>from time import sleep
>from multiprocessing.pool import Pool
># task executed in a worker process
>def task(identifier):
>    # generate a value
>    value = random()
>    # report a message
>    print(f'Task {identifier} executing with {value}', flush=True)
>    # block for a moment
>    sleep(value)
>    # return the generated value
>    return value
># protect the entry point
>if __name__ == '__main__':
>    # create and configure the process pool
>    with Pool() as pool:
>        # execute tasks in order
>        for result in pool.map(task, range(10)):
>            print(f'Got result: {result}', flush=True)
>    # process pool is closed automatically

Na zamieszczonym zdjęciu znajdziesz wszystkie metody z klasy Pool które możesz wykorzystać.

Multiprocessing Pool.map() in Python - Super Fast PythonYou can apply a function to each item in an iterable in parallel using the Pool map() method. In this tutorial you will discover how to use a parallel version of map() with the process pool in Python. Let’s get started. Need a Parallel Version of map() The multiprocessing.pool.Pool in Python provides a pool of […]Super Fast Python
Twórca0piorunów

@markxvyarov Działa to lepiej, niż ręczne tworzenie i zarządzanie wątkami?
Boję się że również tutaj GIL pokaże swoje ograniczenia i w rzeczywistości będzie to wszystko działało, niemal tak jak w jednym wątku

Kosmonauta2piorunów

@qarmin dla tego podałem multiprocessing a nie threading. Przy tym drugim, wątki są blokowane przez GIL, i są one obsługiwany tylko przez jeden rdzeń procesora. Najczęściej wykorzystuje się do zrównoleglenia operacji IO. Tym czasem multiprocessing uruchamia oddzielne procesy pochodne od głównego, dlatego każdy proces może być w tym samym czasie obsłużony przez CPU.

Metoda którą Ci podałem jest o tyle prosta że o nic nie trzeba dbać, a funkcje zwracają wyniki obliczeń.

Pokaż więcej komentarzy (3)

Fanatyk

w Python

8piorunów

**Powerful Python One-Liners**

A z jakich jednolinijkowców Wy korzystacie?

  

Gruba ryba3piorunów

>import itertools, more-itertools
:stuck_out_tongue_closed_eyes:

Fanatyk1piorunów
Gruba ryba1piorunów

@koszotorobur czej - ja rozumiem że itertools w swoich docsach linkuje bezpośrednio do more-itertools, ale wspominanie tylko itertoolsów to zwykła zbrodnia

Fanatyk1piorunów

@wonsz - tak, a co?
>Substantially all of these recipes and many, many others can be installed from the more-itertools project found on the Python Package Index:
>
>python -m pip install more-itertools

Gruba ryba2piorunów

Jedyne do czego używam pythona python3 -m http.server

Fanatyk1piorunów

@def - to i tak dobrze - bo super wygodne 👍

Pokaż więcej komentarzy (15)

Fanatyk

w Python

16piorunów

**Biblioteki Python – Pandas**

Po przeczytaniu tego artykułu dowiesz się jak łatwo wczytywać, przetwarzaćanalizować danePythonie.

   

Inspirator0piorunów

@koszotorobur zwykły Excel xlsx. Jak ręcznie otworze i usunę ten wiersz to otwieram normalnie później. Ale chodzi o to, że one maja się same otwierac

Fenomen0piorunów

@TuzZaRogiem nie możesz po prostu olać pierwszego wiersza? Jakiś skiprow czy coś. Ewentualnie z mojego doświadczenia numpy lepiej sobie radzi z wczytywaniem plików.

Fanatyk1piorunów

@TuzZaRogiem - próbowałeś otwierać innym modułami jak openpyxl i potem zapisać do nowego pliku tylko te rzędy, które potrzebujesz?
Możliwości pracy z plikami Excela w Pythonie jest wiele: https://learnpython.com/blog/python-package-for-excel/
A co w ogóle generuje ten plik - może jest możliwość zgłoszenia i naprawy tego rzedu u tych co ten plik generują?

Best Python Packages for ExcelWorking with Excel in Python is an important skill. In this article, we’ll introduce you to the best Python packages for Excel.LearnPython.com
Pokaż więcej komentarzy (7)

Fanatyk

w Python

39piorunów

**100 Days of Python**

100 praktycznych zadań do ćwiczenia Pythona.

  

Osobistość1piorunów

Taktyczny wąż na zastaw ćwiczeń Pythona

Fanatyk3piorunów

@Guma888 - Pytonga trzeba ćwiczyć regularnie! :snake:

Osobistość1piorunów

Dla mnie to będzie nauka dopiero.

Fanatyk2piorunów

@Guma888 - to zapraszam do zapoznania się z moimi wpisam na tagu  - na pewno znajdziesz tam coś dla siebie co pomoże Ci w nauce Pythona.

Pokaż więcej komentarzy (9)

Fanatyk

w Python

4piorunów

Krótkie video porady na temat Pythona:

https://www.youtube.com/@b001/shorts

Bo czasami lepiej zobaczyć na własne oczy by zrozumieć 👀

  

Praktykant0piorunów

Z takimi sztukami warto uważać bardzo, np. sztuczka przypisania globala do locala fajna, ale promuje złe praktyki.

Fanatyk2piorunów

@piotrb - ze wszystkimi poradnikami i tutorialami trzeba uważać i patrzeć na nie krytycznie 🤷
Niemniej dużo tych porad w tych filmikach to po prostu standardy pythonowe, które nie są oczywiste dla początkujących oraz ludzi przechodzacy z innych języków.
Ja osobiście nie znalazłem źródła 100% poprawnego - prócz może oficjalnej dokumentacji, która jest blisko, ale nie jest jednak skondensowanym źródłem wiedzy do uczenia się "na szybko".

Pokaż więcej komentarzy (2)

Fanatyk

w Python

4piorunów

Jak nauczyć nastolatka Pythona?

Nie szukam teoretycznych informacji bo to sam jestem w stanie sobie znaleźć.

Szukam praktycznych rad i opinii osob które mają doświadczenie w uczeniu programowania młodych osób - nawet jeśli odnieśli porażkę to mogą być w stanie poradzić czego nie robić/unikać.

Hejto pomóż!

 

Sum2piorunów
Fanatyk1piorunów

@psalek - to wygląda bardzo obiecująco jako zadania domowe - dzięki! 👍

Gruba ryba1piorunów

@koszotorobur to zależy czego chcesz nauczyć.

Przygotowanie do olimpiady informatycznej to jest jakaś opcja i UW ma dużo materiałów na ten temat oraz są dostępne zadanka https://szkopul.edu.pl/p/default/problemset/oi/19

Ja w tym wieku jak się uczyłem sam to chyba najprostsza była logomocja (z żółwiem) bo było widać gdzie się znajduje żółw po odpaleniu programu i co skopałem. Też są jakieś zawody, ale tu byś musiał poszukać.

No chyba że dzban, to mu pokaż Django i niech klepie CRUDy aż mu się znudzi xD

- SZKOpułSzkopul
Fanatyk2piorunów

@wombatDaiquiri - olimpiady to nie koniecznie - to są zwykłe nastolatki bez szczególnych zainteresowań i talentów 😅
Moim celem - i właściwie ich celem bo się na to zgodzili - jest zrozumienie czym tak naprawdę jest programowanie i poznanie Pythona i jego możliwości w takim zakresie, który umożliwi im napisanie prostego programu samodzielnie.
Oni są tak zieloni, że muszę im pokazać jak się Pythona instaluje i jak zainstalować VSC i skonfigurować go pod Pythona - wtedy przejdę do podstaw samego języka.
Cały dzień o tym myślę i już mam plan i proste zadania - może napiszę kiedyś co przygotowałem dla nich i jak uczenie poszło.

Gruba ryba0piorunów

@koszotorobur ja dla takich niezainteresowanych pracuję nad zajęciami mocno korzystającymi z ChatGPT i zakładającymi że już mają dostęp do komputera z profesjonalnym i przygotowanym IDE. Może to jest kierunek? W końcu chyba łatwiej się nauczyć zadawać pytania jak można dostać odpowiedź w chwilę o każdej porze dnia i nocy? 😉

Fanatyk2piorunów

@wombatDaiquiri - dobra sugestia 👍
Miałem w planie pokazać im na sam koniec jak szukać informacji - w tym jak pytać ChatGPT i używać kodu co wypluje.
Uważam, że nie trzeba być programistycznym czarodziejem jak potrafi się z głową korzystać z dostępnych narzędzia by sobie coś zautomatyzować.

Pokaż więcej komentarzy (25)