کتابخانهی textwrap یک کتابخانهی استاندارد است که برای قالببندی متن در مواقعی استفاده میشود که به چاپ زیبا و منظم نیاز داریم.
این کتابخانه قابلیتهایی مشابه ویرایشگرهای متن و نرمافزارهای پردازش متن ارائه میدهد.
مروری کوتاه بر قابلیتها:
textwrap.fill() — متن را دریافت کرده و یک متن قالببندیشده برمیگرداند؛ خط اول تورفتگی خود را حفظ میکند و فاصلههای ابتدای هر خط بعدی در قالب پاراگراف قرار داده میشوند.
textwrap.dedent() — برای حذف تورفتگی (پیشوند فاصلهی مشترک) از تمام خطوط متن استفاده میشود.
textwrap.indent() — برای افزودن یک پیشوند متنی به تمام خطوط یک پاراگراف بهکار میرود.
#textwrap
تابع reduce
در پایتون، ماژول functools دسترسی به قابلیتهای تابعی (Functional Programming) زبان را فراهم میکند. یکی از توابع مهم و کاربردی این ماژول، تابع reduce است که با اعمال متوالی یک تابع مشخص روی عناصر یک مجموعه داده، آن مجموعه را به یک مقدار نهایی کاهش میدهد و نتایج میانی را در طول فرآیند حفظ میکند.
بهعنوان مثال، میتوان عملکرد reduce را در ضرب متوالی اعداد مشاهده کرد:
ابتدا عدد 1 در 2 ضرب میشود، سپس حاصل بهدستآمده در 3 ضرب میگردد و این روند به همین شکل ادامه پیدا میکند.
#python #functools
✔️ حذف None و مقادیر تکراری با حفظ ترتیب در پایتون
در بسیاری از سناریوهای واقعی (دیتاپروسسینگ، لاگها، ورودی کاربر)،
علاوه بر حذف مقادیر تکراری و None، حفظ ترتیب عناصر هم اهمیت دارد.
در این حالت استفاده از set مناسب نیست، چون ترتیب را از بین میبرد.
راهحل تمیز و پایتونیک، استفاده از dict.fromkeys است:
data = [1, 2, None, 3, 2, None, 4, 1]
clean_data = list(dict.fromkeys(x for x in data if x is not None))
print(clean_data)
📌 خروجی:
[1, 2, 3, 4]
🔍 مزایا
. ترتیب لیست حفظ میشود
. بدون حلقهی دستی
. مناسب پیشپردازش دیتا
⚠️ نکته:
این روش از پایتون 3.7 به بعد کاملاً قابل اعتماد است (ترتیب دیکشنری حفظ میشود).
#fromkeys | #dict | #list | #none | @LearnPythonIcy
✔️ گروهبندی آیتمها در پایتون با defaultdict
در بسیاری از سناریوهای واقعی
(دیتاپروسسینگ، گزارشگیری، لاگها، دستهبندی دادهها)،
نیاز داریم آیتمها را بر اساس یک کلید مشخص گروهبندی کنیم.
روشهای معمول با if و in کد را شلوغ میکنند.
راهحل پایتونیک و تمیز: استفاده از defaultdict.
from collections import defaultdict
data = [
("apple", "fruit"),
("carrot", "vegetable"),
("banana", "fruit"),
("spinach", "vegetable"),
]
grouped = defaultdict(list)
for item, category in data:
grouped[category].append(item)
print(dict(grouped))
📌 خروجی:
{
'fruit': ['apple', 'banana'],
'vegetable': ['carrot', 'spinach']
}
🔍 مزایا
کد خوانا و کوتاه
بدون نیاز به چککردن وجود کلید
مناسب برای دستهبندی دیتا و گزارشها
⚠️ نکته: defaultdict مقدار پیشفرض میسازد،
پس اگر نوع داده اشتباه انتخاب شود، ممکن است باگ پنهان ایجاد کند.
#defaultdict | #collections | #python | #dataprocessing | @LearnPythonIcy☄ دقت در محاسبات عددی (Floating vs Decimal vs Fraction)
در اغلب زبانهای برنامهنویسی، اعداد اعشاری از نوع Floating-point بهصورت دودویی در حافظه ذخیره میشوند.
این یعنی در بسیاری از محاسبات، با مقادیر تقریبی سروکار داریم، نه عدد دقیق.
برای افزایش دقت:
میتوان از Decimal استفاده کرد که خطای اعشاری را تا حد زیادی کاهش میدهد،
اما حتی Decimal هم در برخی سناریوهای خاص کاملاً بینقص نیست.
📌 وقتی دقت ۱۰۰٪ اهمیت دارد (مثل محاسبات مالی، آماری یا ریاضی دقیق)،
بهترین انتخاب Fraction است.
که Fraction عدد را بهصورت کسر منطقی (صورت/مخرج) ذخیره میکند، نه اعشار تقریبی؛
در نتیجه محاسبات:
. دقیق
. قابل پیشبینی
. بدون خطای اعشاری
انجام میشوند.
✅ خلاصهی انتخاب
float → سریع ولی تقریبی
Decimal → دقیقتر، مناسب محاسبات حساس
Fraction → دقیقترین گزینه برای محاسبات ایدهآل
🧪 مثال
from decimal import Decimal
from fractions import Fraction
# float
print(0.1 + 0.2)
# خروجی: 0.30000000000000004
# Decimal
print(Decimal("0.1") + Decimal("0.2"))
# خروجی: 0.3
# Fraction
print(Fraction(1, 10) + Fraction(2, 10))
# خروجی: 3/10📌 نکته مهم: float بهخاطر نمایش دودویی دچار خطا میشود. Decimal باید با رشته (string) ساخته شود. Fraction نتیجه را دقیق و بدون خطا نگه میدارد #numbers | #precision | #FloatingPoint | #Decimal | #Fraction | @Learnpythonicy
➿ کار با فایلهای YAML در Python با کتابخانه PyYAML
کتابخانه PyYAML امکان کار آسان و مؤثر با فایلهای YAML (YAML Ain’t Markup Language) را فراهم میکند. این فرمت معمولاً برای پیکربندیها، تنظیمات و تبادل دادههای ساختاریافته استفاده میشود.
import yaml
# دادهای که میخواهیم در فایل ذخیره کنیم
data_to_write = {'name': 'علی', 'age': 25, 'city': 'تهران'}
# نوشتن داده در فایل YAML
with open('example.yaml', 'w') as file:
yaml.dump(data_to_write, file, default_flow_style=False)
# خواندن داده از فایل YAML
with open('example.yaml', 'r') as file:
loaded_data = yaml.safe_load(file)
print(f"دادههای بارگذاری شده: {loaded_data}")
خروجی فایل example.yaml:
age: 25
city: تهران
name: علی
در این مثال، ما دیکشنری data_to_write را در فایل example.yaml ذخیره کرده و سپس دادهها را دوباره در متغیر loaded_data بارگذاری میکنیم.
کتابخانه PyYAML ابزار ساده و خوانایی برای کار با دادههای YAML در Python فراهم میکند. چه برای ذخیره پیکربندیها، چه تبادل دادههای ساختاریافته، PyYAML باعث میشود کد شما خوانا و آسان برای استفاده باشد. 🙂↔️
#yaml | #pyyaml | @learnpythonicyاین تست واقعاً ذهن آدمو درگیر میکنه 😈
اول فکر کن خروجی این کد چیه؟ 🤯 و بعد توضیحات و بخون!
❓چرا
- خط ۲: append روی لیست مشترک، همه رو [1] میکنه
- خط ۳: x[1] + [2] یه لیست جدیــد میسازه و به x[1] نسبت داده میشه ← دیگه با بقیه مشترک نیست، میشه [2]
- خط ۴: extend روی لیست مشترک (که هنوز x[0] و x[2] بهش وصله) عدد ۳ رو اضافه میکنه ← هر دو میشن [1, 3]
🔥نکته تستیِ پست
عملگر + همیشه یه لیست جدید میسازه، در حالی که append و extend روی لیست موجود تغییر اعمال میکنند!
Output: [[1, 3], [2], [1, 3]]
🎯 سوال
اگه به جای x[1] = x[1] + [2] مینوشتیم x[1].append(2) چی میشد؟ 🤔👇
#تست_تایم | @learnpythonicy
➿ کار با فایلهای YAML در Python با کتابخانه PyYAML
کتابخانه PyYAML امکان کار آسان و مؤثر با فایلهای YAML (YAML Ain’t Markup Language) را فراهم میکند. این فرمت معمولاً برای پیکربندیها، تنظیمات و تبادل دادههای ساختاریافته استفاده میشود.
import yaml
# دادهای که میخواهیم در فایل ذخیره کنیم
data_to_write = {'name': 'علی', 'age': 25, 'city': 'تهران'}
# نوشتن داده در فایل YAML
with open('example.yaml', 'w') as file:
yaml.dump(data_to_write, file, default_flow_style=False)
# خواندن داده از فایل YAML
with open('example.yaml', 'r') as file:
loaded_data = yaml.safe_load(file)
print(f"دادههای بارگذاری شده: {loaded_data}")
خروجی فایل example.yaml:
age: 25
city: تهران
name: علی
در این مثال، ما دیکشنری data_to_write را در فایل example.yaml ذخیره کرده و سپس دادهها را دوباره در متغیر loaded_data بارگذاری میکنیم.
کتابخانه PyYAML ابزار ساده و خوانایی برای کار با دادههای YAML در Python فراهم میکند. چه برای ذخیره پیکربندیها، چه تبادل دادههای ساختاریافته، PyYAML باعث میشود کد شما خوانا و آسان برای استفاده باشد. 🙂↔️
#yaml | #pyyaml | @learnpythonicy
✔️ مدیریت فایلها در پایتون با ۷ روش حرفهای!
برای کار با فایلها در پایتون، این تکنیکهای کاربردی را امتحان کنید:
1️⃣ باز کردن و خواندن فایل
with open('file.txt', 'r') as f:
content = f.read()
print(content)
2️⃣ نوشتن در فایل
with open('file.txt', 'w') as f:
f.write("سلام دنیا!")
3️⃣ افزودن به فایل
with open('file.txt', 'a') as f:
f.write("\nخط جدید")
4️⃣ خواندن خط به خط
with open('file.txt', 'r') as f:
for line in f:
print(line.strip())
5️⃣ بررسی وجود فایل
import os print(os.path.exists('file.txt')) # True یا False6️⃣ حذف فایل
import os os.remove('file.txt')7️⃣ مدیریت مسیرها با pathlib
from pathlib import Path
path = Path('file.txt')
print(path.exists())
print(path.read_text())
🗝 روش ویژه: خواندن و نوشتن فایلهای CSV با pandas
import pandas as pd df = pd.read_csv('data.csv') print(df.head()) df.to_csv('output.csv', index=False)نکات طلایی * همیشه از
withبرای مدیریت فایل استفاده کنید * برای مسیرهای پیچیده از
pathlibکمک بگیرید * برای دادههای جدولی از
pandasبهره ببرید #PythonMagic | #FileHandling | #pathlib | #pandas | @learnpythonic > *برای ذخیرهسازی، تحلیل داده و اتوماسیون کاربرد دارد*