مشکل در فشرده سازی در پایتون
می خوام با پایتون برنامه ای بنویسم که فایل را بخونه و فشرده سازی کنه به نحوی که 8بایت بخونه و بیت 8(که برای هر کاراکتری صفر است) و حذف کند
فایلی که قراره بخونه یک فایل متنی که توش فقط از کدهای اسکی بین 0 تا 127 استفاده شده است
لطفا کمکم کنید تا استارتش روبزنم :متفکر:
مرسی
نقل قول: مشکل در فشرده سازی در پایتون
به این کار فشرده سازی نمیگن (تقریبا در حالت ایده ال، یک هشتم از حجمت کم میشه. یعنی در صورتی که 8 مگابایت حجم فایلت باشه، میشه 7 مگابایت. اما سرباری رو که برای پردازش فشرده سازی و استخراج کردن داری رو باید در نظر بگیری.)
تو میگی بیت 8 رو حذف کنه؛ ولی موقع نوشتن، باید همۀ این 7بیتی ها رو به هم بچسبونه توی یه بافر (وگرنه موقع نوشتن همچنان بایت-بایت خواهی نوشت)
در ضمن، موقع ذخیره سازی روی دیسک، سیستم عامل فایل ها رو در واحد های "کلاستر" روی دیسک ذخیره می کنه، نه بایت .
یعنی اگر اندازۀ هر کلاستر روی سیستم فایل من 4096 بایت یا همون 4 کیلوبایت باشه، فرقی نمی کنه که من یه فایل 1 بایتی داشته باشم یا 1000 بایتی. در هر دو حالت، یک کلاستر بر روی دیسک من، تخصیص خواهد گرفت به ذخیرۀ این داده
نقل قول: مشکل در فشرده سازی در پایتون
شما خوب منظور منو نفهمیدی هدف من اینکه یک فایل متنی رو باز کنم بعد طوری روی این فایل عملیات انجام بدم که بتونم 8 بایت بخونم ولی 7 بایت بنویسم که طبیعتا باید متن فایل من عوض بشه برای unzip یا Extract (یعنی اینکه بتونه دوباره فایل اولی رو برام برگردونه )هم راه حل میخوام به من بگید از کجا شروع کنم:گیج:
نقل قول: مشکل در فشرده سازی در پایتون
منم دقیقا نفهمیدم ، اگر تو یک بایت رو ننویسی خوب قاعدتا یک سری داده هات از دست میدی،
import gzip
content="Hello World!"
f=gzip.open('d:\\sample.zip','wb')
f.write(content);
f.close()
من یک مثال ساده فشرده سازی برات گزاشتم.
نقل قول: مشکل در فشرده سازی در پایتون
اول از همه باید فایل رو کاراکتر به کاراکتر بخونید و کد اسکی شو بدست بیارید(با استفاده ازord) و بعد اون را به باینری تبدیل کنید (فایل اول فایلی است که کاربر داده و فایل دوم فایلیه که میخواهید فشرده شده شو در اون ذخیره کنید.) من تمام کدهای باینری رو در رشته s ذخیره کردم؛ بعد از اینکه به باینری تبدیل شد هشت تا هشت تا میخونید و آنها را اینت تبدیل میکند و حرف متناظر با اون رو از جدول پیدا میکنید با استفاده از chr؛ و بعد کاراکترهای جدید را در فایل جدید ذخیره میکنید.
def compress(name_file , new_file):
file1 = open(name_file , 'r')
file2 = open(new_file , 'w' , encoding="utf-8")
s = ''
for i in file1.read():
Unicode = ord(i)
temp = bin(Unicode)[2:]
for j in temp:
s += str(j)
a = 0
for i in range(0,len(s)//8):
newchr = s[a:a+8]
newchr = int(newchr , 2)
file2.write(chr(newchr))
a += 8
file1.close()
file2.close()