עזרה - אורך של טקסט

בתרגול תקווה מארחת (מחברת 3) אני נתקל בתופעה מאוד מוזרה.

אני קורא את הטקסט בעזרת הפקודה read, ואז החלטתי לבדוק לעצמי שני דברים - את אורך הטקסט והיכן נמצא הסמן. לכאורה התוצאות אמורות להיות זהות, כי אחרי פקודת read, כפי שלמדנו במחברת, אני מצפה להיות בסוף הטקסט.

והתוצאות שאני מקבל מאוד מוזרות.

hope_text = hope_file.read()

print(hope_file.tell())
print(len(hope_text))

883
447

איך זה יתכן שהמספרים שונים?

לייק 1

היי (: זו שאלה מצוינת!
התשובה היא ש¯tell לא מחזירה את המיקום במובן של “כמה תווים עברתי מתחילת הקובץ” (לפחות לא בדיוק). יותר חכם להסתכל על זה כ"מספר שמייצג את המיקום של הסמן, ושאם אעשה אליו seek אגיע לאותה נקודה".

מהתיעוד:

f.tell() returns an integer giving the file object’s current position in the file represented as number of bytes from the beginning of the file when in binary mode and an opaque number when in text mode.

כשכתוב opaque number הכוונה היא למספר שלא אמור להיות לך מידע מקדים לגביו (:

לייק 1

וואי מעולה שענית על זה, גם אני במקום מסויים חשבתי שהמיקום הסופי מייצג גם את סוף המחרוזת ובכך משליך על האורך שלה.

תודה על החידוד !

הייתי רציני כשכתבתי שזו שאלה מצוינת.
פעם ראשונה שגיליתי את זה הייתה כשכתבתי את המחברת :slight_smile:

לייק 1

מצטרפת לשאלה, עדיין לא ככ מובן לי…
איך יכול להיות שהסמן מצביע על תו 883 כאשר יש 447 במחרוזת?