Python io – BytesIO, StringIO

המודול io של פייתון מאפשר לנו לנהל את פעולות הקלט והפלט הקשורות לקבצים. היתרון בשימוש במודול IO הוא שהמחלקות והפונקציות הזמינות מאפשרות לנו להרחיב את הפונקציונליות כך שניתן יהיה לכתוב לנתוני Unicode.

מודול IO של פייתון

ישנם דרכים רבות בהן ניתן להשתמש במודול io כדי לבצע פעולות זרימה ובאפר בפייתון. נדגים כאן המון דוגמאות כדי להוכיח את הנקודה. בואו נתחיל.

Python BytesIO

די בדומה למה שאנו עושים עם משתנים, ניתן לשמור נתונים כבתים בזיכרון כאשר אנו משתמשים בפעולות Byte IO של המודול io. הנה תוכנית דוגמה להדגמת זה:

import io

stream_str = io.BytesIO(b"JournalDev Python: \x00\x01")
print(stream_str.getvalue())

בואו נראה את הפלט של תוכנית זו: הפונקציה getvalue() פשוטה מביאה את הערך מהבאפר כמחרוזת.

Python StringIO

אפשר אפילו להשתמש ב־StringIO כמו שאנו עושים עם BytesIO. הנה תוכנית דוגמה:

import io

data = io.StringIO()
data.write('JournalDev: ')
print('Python.', file=data)

print(data.getvalue())

data.close()

בואו נראה את הפלט של תוכנית זו: שימו לב שאנו אפילו סגרנו את הבאפר לאחר שסיימנו עם הבאפר. זה עוזר לשמור על זיכרון הבאפר מאחר שהם אוחסנים בזיכרון. גם השתמשנו בשיטת הדפסה עם ארגומנט אופציונלי כדי לציין זרם IO של המשתנה, שהוא מותאם באופן מושלם להצהרת ההדפסה.

קריאה באמצעות StringIO

פעם שכתבנו מידע מסוים לבאפר StringIO, נוכל גם לקרוא אותו. בואו נסתכל על קטע קוד:

import io

input = io.StringIO('This goes into the read buffer.')
print(input.read())

בואו נראה את הפלט של תוכנית זו:

קריאת קובץ באמצעות StringIO

כמו כן אפשר גם לקרוא קובץ ולשדר אותו דרך רשת כבתים. ניתן להשתמש במודול io כדי להמיר קובץ מדיה כמו תמונה לבתים. הנה תוכנית דוגמה:

import io

file = io.open("whale.png", "rb", buffering = 0)
print(file.read())

בואו נראה את הפלט של תוכנית זו: כדי שהתוכנית תרוץ, עלינו לקיים קובץ whale.png בתיקיית הנוכחית.

io.open() נגד os.open()

הפונקציה io.open() היא הדרך המועדפת בהרבה לביצוע פעולות הקלט/פלט מכיוון שהיא מיועדת כממשק רמה גבוהה לביצוע פעולות I/O על קבצים. היא מעטפת את המזהה של הקובץ ברמה של אובייקט שבאמצעותו אנו יכולים לגשת לקובץ בדרך פיתונית. פונקציית os.open() טופלת על השיחה הנמוכה ביותר ל־POSIX. היא מקבלת ארגומנטים בתבנית של POSIX ומחזירה מזהה קובץ שמייצג את הקובץ שנפתח. היא אינה מחזירה אובייקט קובץ; הערך שמוחזר אינו יכול לכלול את פונקציות read() או write(). בסך הכול, פונקציית io.open() היא פשוט מעטפת מעל פונקציית os.open(). פונקציית os.open() גם מגדירה את הגדרות ברירת המחדל כמו דגלים ומצב גם בעוד ש־io.open() לא עושה זאת ומתלווה לערכים שנשלחים אליה.

מסקנה

בשיעור זה, למדנו פעולות פשוטות של מודול IO של פייתון וכיצד אנו יכולים לנהל את התווים בקוד Unicode עם BytesIO גם. אם עם זאת, אם אתה מחפש פעולות קובץ מלאות כמו מחיקה והעתקה של קובץ, אז קרא פייתון קריאת קובץ. הפניה: מסמך API

Source:
https://www.digitalocean.com/community/tutorials/python-io-bytesio-stringio