ניווט

    תחומים
    • הרשמה
    • התחברות
    • חיפוש
    • קטגוריות
    • פוסטים אחרונים
    • משתמשים
    • חיפוש
    • מקצועות
    חוקי הפורום

    סטרים בפייתון

    תוכנה
    2
    3
    55
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגב כנושא
    התחבר בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • MusiCode
      MusiCode נערך לאחרונה על ידי MusiCode

      כ'בוגר' 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ניק שרוף יותר...
      מצפה מאוהדי פייתון לבוא ולהגן, כי אחרת...

      תגובה 1 תגובה אחרונה תגובה ציטוט 2
      • A
        aaron נערך לאחרונה על ידי

        מהתיעוד הרשמי.
        השאלה מה זה אצלך קובץ המקור ולמה אתה קורא לו סטרים..

        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)
        
        MusiCode תגובה 1 תגובה אחרונה תגובה ציטוט 0
        • MusiCode
          MusiCode @aaron נערך לאחרונה על ידי MusiCode

          @aaron קובץ המקור הוא כאמור זרימה של נתונים מהגיבוי של MySQL עיי"ש.
          הנתונים הם 7 GB ולכן חשוב לי שהכל יהיה בזרימה, שלא יתפוס זיכרון.
          היעד הוא העלאה לשרת.

          רק בדוגמא, הכל עם קבצים פיזיים.

          תגובה 1 תגובה אחרונה תגובה ציטוט 0
          • 1 / 1
          • First post
            Last post
          בא תתחבר לדף היומי!