סטרים בפייתון
-
כ'בוגר' NodeJS, שכל הזמן כותב בהזרמות, די הופתעתי לראות שהנושא בכלל לא מוסדר בפייתון. לא הצלחתי למצוא ברשת מדריך איך יוצרים הזרמה בפייתון.
מתשובה בסטאק-אוברפלואו היה נראה שצריך לייצר את הכל לבד.מישהו יודע משהו על הנושא?
מה אני מנסה לעשות:
אני מנסה לעשות הזרמה של קלט מMySQLDump, לGzip כדי לכווץ, ומשם להעלאה לשרת כלשהו.אציין כי הכל (קבלת הקלט -> דחיסה -> העלאה) חייב לקרות בבת אחת, כי הגודל הכולל הוא לפחות 7 GB, ואני לא רוצה עומסים על הזיכרון או הדיסק קשיח.
הצלחתי להזרים לGzip עם קומבינה מסובכת:
io = io.BytesIO() # אובייקט שמחזיק את הצ'אנק i = 0 out_file = open("backup.sql", "wb") # הדמייה של האובייקט שיקלוט את הנתונים with gzip.GzipFile("backup.sql", "wb", fileobj=io) as w_gz: for chank in iter(lambda: f.read(chank_size), b''): # לולאת ההזרמה w_gz.write(chank) # כיווץ w_gz.flush() i += chank_size out_file.write(io.getvalue()) # העתקת הצ'אנק המכווץ io.seek(0) # מחיקת הצ'אנק מהאובייקט הזמני io.truncate(0)נראה לי מאוד פרימיטיבי ולא מוצלח.
בעיקר שב-NodeJS כל זה קורה בשורה אחת.source.pipe(zlib).pipe(destination)מישהו יודע משהו יותר?
ומעכשיו אני JSניק שרוף יותר...
מצפה מאוהדי פייתון לבוא ולהגן, כי אחרת... -
מהתיעוד הרשמי.
השאלה מה זה אצלך קובץ המקור ולמה אתה קורא לו סטרים..import gzip import shutil with open('/home/joe/file.txt', 'rb') as f_in: with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out: shutil.copyfileobj(f_in, f_out)
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות