ערוץ - python tip israel
Kanalga Telegram’da o‘tish
1 792
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kun
Ma'lumot yo'q30 kun
Postlar arxiv
האתר כלים עודכן ועכשיו הכל עובד יותר מהר https://python-tips.vercel.app/
גם עיצוב שופר
🐍 PyOTP ספריית 🕒
🔐 יצירה ואימות של HOTP (OTP HMAC) 🔐
OTP מבוסס HMAC (HOTP) הוא אלגוריתם סיסמאות חד פעמי שיוצר OTP על סמך זמן ומפתח סודי משותף. כך תוכל להשתמש ב- PyOTP כדי ליצור ולאמת HOTP:
import pyotp
# Generate a random HOTP secret
hotp_secret = pyotp.random_base32()
# Create a HOTP object with the secret and a counter
hotp = pyotp.HOTP(hotp_secret)
# Generate the first OTP code
hotp_code = hotp.at(0)
# Now you can print or store the secret and the code
print(f"HOTP secret: {hotp_secret}")
print(f"HOTP code: {hotp_code}")
# To verify a HOTP code, use the following code snippet:
# (Assuming you have the same HOTP secret and counter as before)
user_code = input("Enter the HOTP code: ")
if hotp.verify(user_code, 0):
print("Code is valid")
else:
print("Code is invalid")
עם PyOTP, ניתן להוסיף שכבת אבטחה נוספת לפרוייקט או לאתר פייתון
על ידי הטמעת סיסמאות חד פעמיות 2FA.הקוד בגיטהאב דוגמא לשימוש בpyotp עם flask
https://github.com/nhman-python/flask-2fa
חישוב כמה ימים וכמה שניות עברו מאז תאריך מסוים
עדיין בפיתוח יוסיף בהמשך עוד הרבה פיטצ'רים מעניינים
https://age-calctor.vercel.app/
למי שרוצה סקריפט חמוד שהכנתי להספים פישינג צריך רק לדעת מה הפרמטרים שנשלחים פועל רק באתרים ללא הגנה מיוחדת או בדיקת בקשות csrf וכו...
https://gist.github.com/nhman-python/238b4076ceeb077a9db6ac9f7afd25ef
דחיסה וחילוץ קבצים Pyminizip 📚🗜
## דחיסת קובץ:
import pyminizip source_file = "example.txt" target_zip = "compressed.zip" password = None # set password as string if you need compression_level = 5 # 1-9 pyminizip.compress(source_file, None, target_zip, password, compression_level)## דחיסת מספר קבצים:
import pyminizip source_files = ['file.txt', 'file1.txt', 'file2.txt'] target_zip = "multiple_files.zip" password = "secure_password" # set password or leve blank compression_level = 5 # You can adjust the compression level as needed 1-9. pyminizip.compress_multiple(source_files, [], target_zip, password, compression_level)## ייצוא קבצים
import pyminizip # Define the source ZIP file path, password, target directory path, and without an option. src_file_path = "multiple_files.zip" password = "" target_dir = "./extract_path" # must!!!! create this directory before without_path = 0 # Set to 1 to exclude a path during extraction, set to 0 to include a path. # Perform the file extraction. pyminizip.uncompress(src_file_path, password, target_dir, without_path)
הצהרות match וcase
⚠️ הקוד יעבוד רק בפייתון 3.10 ומעלה ⚠️
תכונה די חדשה ב- Python 3.10. מספקת דרך קלה ותמציתית יותר ליישם הצהרות if else וכו'.
הצהרת match לוקחת ביטוי כטיעון ולאחר מכן משווה אותו לסדרה של מקרים (case). כל מקרה הוא הצהרה המציינת ערך כל שהוא ואת הקוד לביצוע אם הדפוס תואם.
הנה דוגמה פשוטה להצהרת match:
response_code = 400
match response_code:
case 200:
print("all work!")
case 300:
print("error 300!")
case 400:
print("how something bad happens")
case 500:
print("Something went wrong.")
בדוגמה זו, אנו בודקים את הערך של המשתנה response_code. אם הערך הוא 200, נדפיס את ההודעה "all work!" אם הערך הוא 300, נדפיס את ההודעה "error 300", וכן הלאה.
ניתן להשתמש בהצהרות match case כדי ליישם לוגיקה מורכבת יותר מהדוגמה הפשוטה שלמעלה. לדוגמה, נוכל להשתמש בהם כדי לבדוק את סוג האובייקט או כדי להתאים מחרוזת לביטוי רגולרי.
הנה דוגמה להצהרת match שבודק את סוג האובייקט:
data = {"name": "John Doe", "age": 30}
match data:
case dict():
print("The data is a dictionary.")
case list():
print("The data is a list.")
case str():
print("The data is a string.")
case int():
print("The data is an integer.")
case float():
print("The data is a float.")
case None:
print("The data is None.")
בדוגמה זו, אנו בודקים את סוג משתנה הנתונים. אם המשתנה הוא מילון, נדפיס את ההודעה "The data is a dictionary.". אם המשתנה הוא רשימה, נדפיס את ההודעה "The data is a list.", וכן הלאה.
ניתן להשתמש בהצהרות match case גם כדי להתאים מחרוזות לביטויים רגולריים. לדוגמה, הקוד הבא מתאים למחרוזת "hello world" מול הביטוי הרגולרי "hello (.*)":
import re
x = "hello world"
match x:
case value if re.match(r"hello (.*)", value):
print("The string matches the regular expression.")
case _:
print("The string does not match the regular expression.")
בדוגמה זו, אם המחרוזת "hello world" תואמת לביטוי הרגולרי, ההודעה "המחרוזת תואמת את הביטוי הרגולרי." מודפס. אחרת, ההודעה "המחרוזת לא תואמת לביטוי הרגולרי." מודפס.
סיכום:
הצהרת match וcase זוהי אפשרות אלגנטית וקלילה כדי ליישם הצהרות if-else בצורה נוחה יותר.עד שאכין סרטון
תוכלו לראות פה
בשורה 44 את הפונקציה שבודקת את הנתיב ובשורות 171 172 הוספתי בדיקה אם הנתיב נמצא רק בתקיית העלאות רק אז יהיה ניתן למחוק את הקובץ
דוגמא לניצול בקוד ללא הבדיקה:
../somefile.txt
עובר לתקייה קודמת על ידי שימוש ב. .
למי שלא מכיר זה כמו הפקודה cd. .
יותר מאוחר יעלה עוד כמה שיפורים כמו אפשרות לעלות רק אם משתמש רשום וכו'
תוקן אקספלויט שנתן אפשרות למחוק כל קובץ בשרת דרך בקשת http
רוצים לראות איך הניצול עובד?
ואיך תיקנתי אותו?
👍/👎
הסבר args kwargs:
1.
*args:
הפרמטר *args מאפשר לפונקציה לקבל מספר של פרמטרים מיקומיים שונים.
או "רשימת ארגומנטים באורך משתנה". האופרטור * משמש להעברת מספר משתנה של ארגומנטים לפונקציה.
הנה דוגמה שתמצא את השימוש שלו:
def print_number(*args):
for arg in args:
print(arg)
print_number(1, 2, 3, 4)
פלט:
1
2
3
4
בדוגמה שנתתי, הפונקציה print_number מקבלת מספר כלשהו של ארגומנטים, אשר נדפיס בתוך הפונקציה. הפרמטר *args מאפשר לנו להעביר מספר ארגומנטים מראש, מבלי לציין אותם באופן יחיד.
2. **kwargs:
הפרמטר kwargs מאפשר לפונקציה לקבל מספר של ארגומנטים מזוהים שונים. האופרטור משמש להעברת מספר משתנה של ארגומנטים מזוהים לפונקציה.
הנה דוגמה שתמצא את השימוש שלו:
def print_details(**kwargs):
for key, value in kwargs.items():
print(key, "=", value)
print_details(name="John", age=25, country="USA")
פלט:
name = John
age = 25
country = USA
בדוגמה שנתתי, הפונקציה print_details מקבלת מספר ארגומנטים שונים, הפרמטר **kwargs מאפשר לנו להעביר מספר ארגומנטים מבלי להגדירם באופן מפורש בחתימת הפונקציה.
סיכום *args ו- **kwargs מועילים כאשר נצטרך לקבל מספר ארגומנטים שאינו מוגד מראש.
*args עובד עם ארגומנטים מיקומיים, בעוד **kwargs עובד עם ארגומנטים מזוהים. תכונות אלה מספקות גמישות ומאפשרות ליצור פונקציות שיכולות לעבוד עם מגוון רחב של קלטים.שרת העלאת קבצים↖️ כולל ממשק ניהול לקבצים
https://github.com/nhman-python/upload_http_python
מחיקת קבצים בצורה מאובטחת 🗑
כולל אפשרות לבחור כמה דריסות הקובץ יעשה לפני שימחק את הקובץ
קוד מקור:
https://github.com/nhman-python/secure-delete
אתגר ls, dir
רמה :קלה
צרו סקריפט שמציג את הקבצים שקיימים בתקיה הנוכחית בעזרת מודול os כולל הגודל שלהם בmd (מ''ב)
תשובות לפה
@Python_tipbot
📁 קבלת רשימה של כל הקבצים שנמצאים בתקיה כולל תתי תקיות 🗂
הפונקציה
os.walk היא פונקציה שנועדה לעבור על כל התקיות והקבצים בתיקייה מסוימת ובתתי-תתי-תיקיות שלה. היא סורקת את שמות הקבצים, מתחילה מהתיקייה הנוכחית ואז ממשיכה לסריקת תתי-תיקיות עד לסיום סריקת כל התקיות והקבצם.
הנה התחביר הבסיסי של os.walk:
import os for root, directories, files in os.walk(folder_path):בוא נפרק את כל אחד מרכיבי פונקציית
os.walk:
- folder_path : זו התיקייה ההתחלתית ממנה נתחיל את הסריקה. ניתן לספק נתיב יחסי או מוחלט לתיקייה.
- root: מייצג את התיקייה הנוכחית שבה os.walk עובר כעת. זהו מחרוזת שמכילה את הנתיב לתיקייה הנוכחית.
- directories: זוהי רשימה של כל התיקיות המשניות בתוך התיקייה הנוכחית.
- files: זוהי רשימה של כל הקבצים בתוך התקיות ותתי התקיות
דוגמא להדפסת כל נתיבי הקבצים בתקייה כולל קבצים בתתי-תקיות:
for root, directories
, files in os.walk('/folder'):
for file in files:
print(os.path.join(root, file))הצפנת 🔐 תקיות שלמות
הסקריפט מחפש את כל הקבצים בכל התקיות ומצפין אותם
זהירות ‼️ לא להשים נתיב מערכת כמו c וכו...
זה פשוט ילך ויחפש את כל הקבצים שאפשר לכתוב עליהם ויצפין אותם
לתיעוד המלא של הספרייה:
https://pypi.org/project/simple2encrypt/
מדריך ל-setuptools ב-פיתון ויצירת מודולי ספריות 📦
מבוא:
ספריית setuptool היא כלי עוצמתי המספק דרך פשוטה ליצירה והפצה של ספריות או חבילות ב-פייתון. הכלי מספק אופן מתקנת להגדרת מטא-נתונים, ניהול תלות ובניית חבילות הפצה. במאמר זה נחקור את היסודות של Setuptools ונדבר על אופן יצירת מודולי ספריות בעזרת הכלי הזה.
1. התקנת Setuptools:
לפני שנתחיל ליצור את הספריה, יש לוודא שה-Setuptools מותקן במערכת שלך. ניתן להתקין אותו בעזרת הפקודה הבאה ב-pip, מנהל החבילות של Python:
pip install setuptools
2. מבנה הפרויקט:
כדי ליצור מודול של ספריה, חשוב לשמור על מבנה פרויקט מסוים. נחליף תחילה תיקיית הפרויקט של הספריה. בתוך התיקייה הזו ניצור עוד תיקייה נוספת עם אותו השם כמו הספריה שלנו. התיקייה הפנימית תכיל את קבצי הקוד של המודולים של הספריה. בנוסף, עלינו ליצור קובץ setup.py בראש התיקייה של הפרויקט.
לדוגמה, כך ייראה מבנה הפרויקט:
my_library/ ├── my_library/ │ ├── __init__.py │ └── module.py └── setup.py3. יצירת המודול של הספריה: בתוך התיקייה my_library, ניתן ליצור קבצי מודול של Python המגדירים את הפונקציות של הספריה שלך. קבצי המודול יהיו עם סיומת .py ויכולים לכלול מחלקות, פונקציות ומשתנים. עלינו גם לכלול קובץ
init__.py__ בתוך תיקיית my_library כדי להפוך אותה לחבילה.
לדוגמה, ניצור מודול פשוט בשם module.py עם התוכן הבא:
def greet(name):
print(f"hello, {name}!")
4. הגדרת מטא-נתונים:
כדי לספק מידע על הספריה שלך, כגון השם, גרסה, מחבר ותלות, עלינו ליצור קובץ setup.py. פתחו את קובץ ה-setup.py והגדירו את מטא-נתונים בעזרת פונקציית setup() של Setuptools.
לדוגמה, כך ייראה קובץ ה-setup.py:
from setuptools import setup, find_packages
setup(
name="my-library",
version="0.1.0",
author="Your Name",
author_email="your@email.com",
description="A simple library for greeting",
packages=find_packages(),
)
5. בניית והתקנה של הספריה:
עם מבנה הפרויקט והמטא-נתונים במקום, ניתן לבנות את חבילת הספריה באמצעות Setuptools. פתח את הטרמינל, נווט לתיקיית הפרויקט והרץ את הפקודה הבאה:
python3 setup.py sdist bdist_wheel
הפקודה תיצור שני חבילות הפצה:
חבילת מקור (sdist) וחבילת (bdist_wheel).
כדי להתקין את הספריה באופן מקומי לצורך בדיקות, הריץ את הפקודה הבאה:
python3 setup.py installאפשר גם להפיץ את הספריה על ידי העלאת חבילת ההפצה שנוצרה ל- PyPI או גורם פקודה אחר. 6. השימוש בספריה: לאחר התקנת הספריה, ניתן לייבא ולהשתמש בה בקובצי Python אחרים או בפרויקטים נוספים. לדוגמה, אם יש לך מודול בשם module.py עם פונקציה greet(), ניתן לייבא ולקרוא לפונקציה כך:
from my_library.module import greet
greet("hello")
מסקנה:
ספריית setuptools מקלה על תהליך יצירה והפצה של ספריות או חבילות ב-פייתון. על ידי עקיפת שלבים כמו בניית חבילות והגדרת מטא-נתונים, מפשט את התהליך ומאפשר למפתחים להתרכז ביצירת ספריות חזקות וקלות לשימוש.יותר מאוחר הסבר
איך להצפין 🔐 את כל הנתונים שלכם או תקיות מסוימות ורק אם קובץ המפתח תוכלו לשחזר את המידע אבל אני מוסיף אזהרה ❗️❗️ לא להשתמש בזה נגד אנשים או לוירוסים וכו אני לא לוקח שום אחריות
השימוש רק למטרות אישיות
לקבוצת הדיונים
https://t.me/python_tip_chat
לשאלות בפרטי
@Python_tipbot
דוגמא לשימוש בספריה להצפנה, עשיתי את זה הכי פשוט שאפשר 🔐
from simple2encrypt import Encryption, generate_key
key = generate_key('hello_world', 32)
message = b'hello'
encrypt = Encryption(key, data=message)
print(encrypt.encrypt())