کاراکترهای قابلخواندن، با encoding رمزگذاری میشه
.txt، .csv
باینری (binary)
دنباله خام بایتها، بدون تفسیر متنی
.jpg، .png، .mp3، .pdf، .zip
در حالت متنی، پایتون بایتها رو با یک encoding (مثلاً UTF-8) به رشته تبدیل میکنه
در حالت باینری، هیچ تبدیلی انجام نمیشه — داده بهصورت خام (bytes) خونده/نوشته میشه
باز کردن فایل باینری — حرف b
حالت
کاربرد
'rb'
خواندن باینری
'wb'
نوشتن باینری (پاککردن محتوای قبلی)
'ab'
append باینری
'xb'
ساخت فایل باینری جدید (خطا اگه وجود داشته باشه)
خواندن فایل باینری
withopen('image.jpg', 'rb') as f: data = f.read()print(type(data)) # <class 'bytes'>print(len(data)) # تعداد بایتها
خروجی از نوع bytes هست، نه str
⚠️ متدهای رشتهای مثل .rstrip() یا .startswith('متن') روی bytes فرق دارن (باید با b'...' مقایسه بشن)
نوشتن فایل باینری
data =b'\x89PNG\r\n\x1a\n...'withopen('output.bin', 'wb') as f: f.write(data)
فقط bytes یا bytearray قابل نوشتنه، نه رشته معمولی
کپی کردن یک فایل باینری (مثال کاربردی)
withopen('source.jpg', 'rb') as fin:withopen('copy.jpg', 'wb') as fout: fout.write(fin.read())
برای فایلهای بزرگ بهتره تکهتکه (chunk) بخونیم تا حافظه پر نشه:
withopen('source.jpg', 'rb') as fin, open('copy.jpg', 'wb') as fout:whileTrue: chunk = fin.read(4096) # هر بار ۴۰۹۶ بایتifnot chunk:break fout.write(chunk)