الفرق بين المراجعتين لصفحة: «Python/reading writing files»

من موسوعة حسوب
أنشأ الصفحة ب'تستخدم الدالة <code>open()</code>‎ لقراءة الملفات في بايثون، وتعيد هذه الدالة كائن <code>file</code> وتستخدم...'
 
ط نقل عبد اللطيف ايمش صفحة Python/reading-writing-files إلى Python/reading writing files
 
(8 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
تستخدم الدالة <code>open()</code>‎ لقراءة الملفات في بايثون، وتعيد هذه الدالة كائن <code>file</code> وتستخدم عادة مع وسيطين <code>open(filename, mode)</code>‎ كما هو موضح في المثال التالي:<syntaxhighlight lang="python3">
<noinclude>{{DISPLAYTITLE:قراءة الملفات والكتابة فيها في بايثون}}</noinclude>
تتيح بايثون إمكانية الوصول إلى الملفات في نظام التشغيل وقرائتها والكتابة عليها دون الحاجة إلى استخدام مكتبات خارجية.
 
== قراءة الملفات ==
تستخدم الدالة <code>[[Python/open|open()]]</code>‎ لقراءة الملفات في بايثون، وتعيد هذه الدالة كائن <code>file</code> وتستخدم عادة مع وسيطين <code>open(filename, mode)</code>‎ كما هو موضح في المثال التالي:<syntaxhighlight lang="python3">
>>> f = open('workfile', 'w')
>>> f = open('workfile', 'w')
</syntaxhighlight>الوسيط الأول هو [[Python/str|سلسلة نصية]] تتضمن اسم الملف المراد فتحه. أما الوسيط الثاني فهو سلسلة نصية أيضًا تتضمن بضع حروف تصف طريقة استخدام الملف المفتوح. يمكن للوسيط الثاني <code>mode</code> أن يأخذ القيمة <code>'r'</code> وعندها سيستخدم الملف المفتوح للقراءة فقط، ويأخذ القيمة <code>'w'</code> ليكون الملف المفتوح للكتابة فقط (سيحذف التابع أي ملف يحمل الاسم نفسه)، ويأخذ القيمة <code>'a'</code> للكتابة في نهاية الملف، ويأخذ القيمة <code>‎'r+'</code>‎ لفتح الملف في نمطي القراءة والكتابة معًا.
</syntaxhighlight>الوسيط الأول هو [[Python/str|سلسلة نصية]] تتضمن اسم الملف المراد فتحه. أما الوسيط الثاني فهو [[Python/str|سلسلة نصية]] أيضًا تتضمن بضع حروف تصف طريقة استخدام الملف المفتوح. يمكن للوسيط الثاني <code>mode</code> أن يأخذ القيمة <code>'r'</code> وعندها سيستخدم الملف المفتوح للقراءة فقط، ويأخذ القيمة <code>'w'</code> ليكون الملف المفتوح للكتابة فقط (سيحذف التابع أي ملف يحمل الاسم نفسه)، ويأخذ القيمة <code>'a'</code> للكتابة في نهاية الملف، ويأخذ القيمة <code>‎'r+'</code>‎ لفتح الملف في نمطي القراءة والكتابة معًا.


الوسيط <code>mode</code> هو وسيط اختياري، ويأخذ القيمة <code>'r'</code> في حال عدم تعيينه.
الوسيط <code>mode</code> هو وسيط اختياري، ويأخذ القيمة <code>'r'</code> في حال عدم تعيينه.


تفتح الملفات عادة في النمط النصي (text mode) والذي يعني قراءة السلاسل النصية وكتابتها من وإلى الملف، وتكون هذه السلاسل النصية مرمّزة بترميز معيّن، وفي حال عدم تعيين الترميز تأخذ السلاسل ترميزًا يعتمد على المنصّة التي تعمل عليها اللغة (راجع الدالة <code>[[Python/open|open()]]</code>‎).
تفتح الملفات عادة في النمط النصي (text mode) والذي يعني قراءة [[Python/str|السلاسل النصية]] وكتابتها من وإلى الملف، وتكون هذه [[Python/str|السلاسل النصية]] مرمّزة بترميز معيّن، وفي حال عدم تعيين الترميز تأخذ السلاسل ترميزًا يعتمد على المنصّة التي تعمل عليها اللغة (راجع الدالة <code>[[Python/open|open()]]</code>‎).


يؤدي إلحاق السلسلة النصية <code>'b'</code> بالوسيط <code>mode</code> إلى فتح الملف في النمط الثنائي (binary mode)، وفي هذا النمط تُقرأ البيانات وتُكتب على هيئة كائنات ثنائية (bytes objects)، ويستخدم هذا النمط مع جميع الملفات التي لا تتضمّن نصوصًا.
يؤدي إلحاق السلسلة النصية <code>'b'</code> بالوسيط <code>mode</code> إلى فتح الملف في النمط الثنائي (binary mode)، وفي هذا النمط تُقرأ البيانات وتُكتب على هيئة كائنات ثنائية (bytes objects)، ويستخدم هذا النمط مع جميع الملفات التي لا تتضمّن نصوصًا.
سطر 13: سطر 17:
لا تتسبّب عملية التعديل هذه بأي مشاكل في الملفات النصية، ولكنّها تؤدي إلى تلف البيانات الثنائية كما في ملفات ذات الصيغة JPEG أو EXE؛ لذا يجب الحرص على استخدام النمط الثنائي عند القراءة والكتابة من وإلى هذا النوع من الملفات.
لا تتسبّب عملية التعديل هذه بأي مشاكل في الملفات النصية، ولكنّها تؤدي إلى تلف البيانات الثنائية كما في ملفات ذات الصيغة JPEG أو EXE؛ لذا يجب الحرص على استخدام النمط الثنائي عند القراءة والكتابة من وإلى هذا النوع من الملفات.


ينصح باستخدام الكلمة المفتاحية <code>with</code> عند التعامل مع كائنات الملفات، ومن فوائدها أنّه سيتم إغلاق الملف بطريقة صحيحة بعد انتهاء الشيفرة البرمجية، حتى لو أُطلق استثناء في أي مرحلة من مراحل تنفيذ الشيفرة، إلى جانب أن استخدام <code>with</code> يختصر كتابة كتلة <code>try-finally</code> المكافئة:<syntaxhighlight lang="python3">
ينصح باستخدام الكلمة المفتاحية <code>with</code> عند التعامل مع كائنات الملفات، ومن فوائدها أنّه سيُغلَق الملف بطريقة صحيحة بعد انتهاء تنفيذ الشيفرة البرمجية، حتى لو أُطلق [[Python/exceptions|استثناء]] في أي مرحلة من مراحل تنفيذ الشيفرة، إلى جانب أن استخدام <code>with</code> يختصر كتابة كتلة <code>[[Python/exceptions#.D8.A7.D9.84.D8.AA.D8.B9.D8.A7.D9.85.D9.84 .D9.85.D8.B9 .D8.A7.D9.84.D8.A7.D8.B3.D8.AA.D8.AB.D9.86.D8.A7.D8.A1.D8.A7.D8.AA .D8.A8.D8.A7.D8.B3.D8.AA.D8.AE.D8.AF.D8.A7.D9.85 .D8.B9.D8.A8.D8.A7.D8.B1.D8.A9 try-except|try-finally]]</code> المكافئة:<syntaxhighlight lang="python3">
>>> with open('workfile') as f:
>>> with open('workfile') as f:
...     read_data = f.read()
...     read_data = f.read()
سطر 32: سطر 36:
في الأمثلة التالية ضمن هذا القسم، سنفترض أنّنا قد أنشأنا مسبقًا كائن ملفّ يحمل الاسم <code>f</code>.
في الأمثلة التالية ضمن هذا القسم، سنفترض أنّنا قد أنشأنا مسبقًا كائن ملفّ يحمل الاسم <code>f</code>.


لقراءة محتويات الملف يمكن استدعاء الدالة <code>f.read(size)‎</code> والتي تقرأ كمية من البيانات وتعيدها على هيئة سلسلة نصية (في النمط النصي) أو كائنات ثنائية (في النمط الثنائي). الوسيط <code>size</code> هو وسيط رقمي اختياري. عند عدم استخدام هذا الوسيط أو عندما يأخذ قيمة سالبة، فإنّ الدالة ستقرأ وتعيد محتويات الملف بأكمله، ولكن يجب الانتباه إلى أنّه قد يكون حجم الملف المفتوح أكبر من الذاكرة المتوفّرة في الجهاز. أما عند تعيين قيمة الوسيط <code>size</code> تقرأ الدالة المقدار المطلوب من البايتات وتعيده، وعند الوصول إلى نهاية الملف تعيد الدالة <code>f.read()‎</code> سلسلة نصية فارغة <code>(<nowiki>''</nowiki>)</code>.
=== <code>f.read()‎</code> ===
لقراءة محتويات الملف يمكن استدعاء الدالة <code>f.read(size)‎</code> والتي تقرأ كمية من البيانات وتعيدها على هيئة [[Python/str|سلسلة نصية]] (في النمط النصي) أو كائنات ثنائية (في النمط الثنائي). الوسيط <code>size</code> هو وسيط رقمي اختياري. عند عدم استخدام هذا الوسيط أو عندما يأخذ قيمة سالبة، فإنّ الدالة ستقرأ وتعيد محتويات الملف بأكمله، ولكن يجب الانتباه إلى أنّه قد يكون حجم الملف المفتوح أكبر من الذاكرة المتوفّرة في الجهاز. أما عند تعيين قيمة الوسيط <code>size</code> تقرأ الدالة المقدار المطلوب من البايتات وتعيده، وعند الوصول إلى نهاية الملف تعيد الدالة <code>f.read()‎</code> [[Python/str|سلسلة نصية]] فارغة <code>(<nowiki>''</nowiki>)</code>.


يوضح المثال التالي عمل هذه الدالة:<syntaxhighlight lang="python3">
يوضح المثال التالي عمل هذه الدالة:<syntaxhighlight lang="python3">
سطر 39: سطر 44:
>>> f.read()
>>> f.read()
''
''
</syntaxhighlight>تقرأ الدالة <code>f.readline()‎</code> سطرًا واحدًا من الملف، وتضيف الدالة محرف السطر الجديد (‎<code>\n</code>) في نهاية السلسلة النصية، ولا يضاف في السطر الأخير من الملف إن كان الملف لا ينتهي بمحرف السطر الجديد، ويساعد هذا على إزالة اللبس في القيمة المعادة، فلو أعادت <code>f.readline()</code>‎ سلسلة نصية فارغة فهذا يعني أنّ الدالة قد وصلت إلى نهاية الملف، وإن كان السطر المقروء فارغًا فإنّ السلسلة المعادة ستحتوي على محرف السطر الجديد فقط.<syntaxhighlight lang="python3">
</syntaxhighlight>
 
=== <code>f.readline()‎</code> ===
تقرأ الدالة <code>f.readline()‎</code> سطرًا واحدًا من الملف، وتضيف الدالة محرف السطر الجديد (‎<code>\n</code>) في نهاية السلسلة النصية، ولا يضاف في السطر الأخير من الملف إن كان الملف لا ينتهي بمحرف السطر الجديد، ويساعد هذا على إزالة اللبس في القيمة المعادة، فلو أعادت <code>f.readline()</code>‎ [[Python/str|سلسلة نصية]] فارغة فهذا يعني أنّ الدالة قد وصلت إلى نهاية الملف، وإن كان السطر المقروء فارغًا فإنّ السلسلة المعادة ستحتوي على محرف السطر الجديد فقط.<syntaxhighlight lang="python3">
>>> f.readline()
>>> f.readline()
'This is the first line of the file.\n'
'This is the first line of the file.\n'
سطر 47: سطر 55:
''
''


</syntaxhighlight>لقراءة جميع الأسطر في الملف يمكن استخدام الحلقات التكرارية للمرور على كائن الملف، وتكون شيفرة التكرار بسيطة وسريعة وأقل استهلاكًا للذاكرة:<syntaxhighlight lang="python3">
</syntaxhighlight>لقراءة جميع الأسطر في الملف يمكن استخدام [[Python/for|الحلقات التكرارية]] للمرور على كائن الملف، وتكون شيفرة التكرار بسيطة وسريعة وأقل استهلاكًا للذاكرة:<syntaxhighlight lang="python3">
>>> for line in f:
>>> for line in f:
...     print(line, end='')
...     print(line, end='')
سطر 54: سطر 62:
Second line of the file
Second line of the file


</syntaxhighlight>يمكن قراءة جميع أسطر الملف في قائمة يمكن استخدام <code>list(f)</code>‎ أو <code>f.readlines()‎</code>.
</syntaxhighlight>يمكن قراءة جميع أسطر الملف في [[Python/list|قائمة]] يمكن استخدام <code>list(f)</code>‎ أو <code>f.readlines()‎</code>.


=== <code>f.write()‎</code> ===
يكتب التابع <code>f.write(string)</code>‎ محتويات الوسيط <code>string</code> في الملف ويعيد عدد الحروف المكتوبة.<syntaxhighlight lang="python3">
يكتب التابع <code>f.write(string)</code>‎ محتويات الوسيط <code>string</code> في الملف ويعيد عدد الحروف المكتوبة.<syntaxhighlight lang="python3">
>>> f.write('This is a test\n')
>>> f.write('This is a test\n')
15
15
</syntaxhighlight>يجب تحويل أنواع البيانات الأخرى إما إلى سلسلة نصية (في النمط النصي) او كائنات ثنائية (في النمط الثنائي) لغرض كتابتها في الملف:<syntaxhighlight lang="python3">
</syntaxhighlight>يجب تحويل أنواع البيانات الأخرى إما إلى [[Python/str|سلسلة نصية]] (في النمط النصي) او [[Python/bytes|كائنات ثنائية]] (في النمط الثنائي) لغرض كتابتها في الملف:<syntaxhighlight lang="python3">
>>> value = ('the answer', 42)
>>> value = ('the answer', 42)
>>> s = str(value)  # تحول الصف إلى سلسلة نصية
>>> s = str(value)  # تحول الصف إلى سلسلة نصية
سطر 65: سطر 74:
18
18


</syntaxhighlight>يعيد التابع <code>f.tell()‎</code> عددًا صحيحًا يعطي الموقع الحالي لكائن الملف ضمن الملف المفتوح متمثّلًا بعدد البايتات من بداية الملف إلى الموقع الحالي في النمط الثنائي، وبعدد غير واضح في النمط النصي.
</syntaxhighlight>
 
=== <code>f.tell()‎</code> ===
يعيد التابع <code>f.tell()‎</code> [[Python/int|عددًا صحيحًا]] يعطي الموقع الحالي لكائن الملف ضمن الملف المفتوح متمثّلًا بعدد [[Python/bytes|البايتات]] من بداية الملف إلى الموقع الحالي في النمط الثنائي، وبعدد مبهم في النمط النصي.


ولتغيير الموقع الحالي في كائن الملف يمكن استخدام التابع <code>f.seek(offset, from_what)‎</code>. يُحسب الموقع بإضافة الوسيط <code>offset</code> إلى نقطة مرجعية، ويجري اختيار النقطة المرجعية بواسطة الوسيط <code>from_what</code>. القيمة <code>0</code> تعني بدء الحساب من بداية الملف، أما القيمة <code>1</code> فتعني استخدام الموقع الحالي في الملف كنقطة مرجعية لبدء الحساب، أما <code>2</code> فتعني أن النقطة المرجعية في نهاية الملف. يمكن الاستغناء عن قيمة <code>from_what</code> وستأخذ القيمة الافتراضية <code>0</code> وبذلك تأخذ الدالة بداية الملف كنقطعة مرجعية.<syntaxhighlight lang="python3">
ولتغيير الموقع الحالي في كائن الملف يمكن استخدام التابع <code>f.seek(offset, from_what)‎</code>. يُحسب الموقع بإضافة الوسيط <code>offset</code> إلى نقطة مرجعية، ويجري اختيار النقطة المرجعية بواسطة الوسيط <code>from_what</code>. تعني القيمة <code>0</code>   أن عملية الحساب ستجري من بداية الملف، أما القيمة <code>1</code> فتعني استخدام الموقع الحالي في الملف كنقطة مرجعية لبدء الحساب، أما <code>2</code> فتعني أن النقطة المرجعية في نهاية الملف. يمكن الاستغناء عن قيمة <code>from_what</code> وستأخذ القيمة الافتراضية <code>0</code> وبذلك تأخذ الدالة بداية الملف كنقطة مرجعية.<syntaxhighlight lang="python3">
>>> f = open('workfile', 'rb+')
>>> f = open('workfile', 'rb+')
>>> f.write(b'0123456789abcdef')
>>> f.write(b'0123456789abcdef')

المراجعة الحالية بتاريخ 12:38، 29 مايو 2018

تتيح بايثون إمكانية الوصول إلى الملفات في نظام التشغيل وقرائتها والكتابة عليها دون الحاجة إلى استخدام مكتبات خارجية.

قراءة الملفات

تستخدم الدالة open()‎ لقراءة الملفات في بايثون، وتعيد هذه الدالة كائن file وتستخدم عادة مع وسيطين open(filename, mode)‎ كما هو موضح في المثال التالي:

>>> f = open('workfile', 'w')

الوسيط الأول هو سلسلة نصية تتضمن اسم الملف المراد فتحه. أما الوسيط الثاني فهو سلسلة نصية أيضًا تتضمن بضع حروف تصف طريقة استخدام الملف المفتوح. يمكن للوسيط الثاني mode أن يأخذ القيمة 'r' وعندها سيستخدم الملف المفتوح للقراءة فقط، ويأخذ القيمة 'w' ليكون الملف المفتوح للكتابة فقط (سيحذف التابع أي ملف يحمل الاسم نفسه)، ويأخذ القيمة 'a' للكتابة في نهاية الملف، ويأخذ القيمة ‎'r+'‎ لفتح الملف في نمطي القراءة والكتابة معًا.

الوسيط mode هو وسيط اختياري، ويأخذ القيمة 'r' في حال عدم تعيينه.

تفتح الملفات عادة في النمط النصي (text mode) والذي يعني قراءة السلاسل النصية وكتابتها من وإلى الملف، وتكون هذه السلاسل النصية مرمّزة بترميز معيّن، وفي حال عدم تعيين الترميز تأخذ السلاسل ترميزًا يعتمد على المنصّة التي تعمل عليها اللغة (راجع الدالة open()‎).

يؤدي إلحاق السلسلة النصية 'b' بالوسيط mode إلى فتح الملف في النمط الثنائي (binary mode)، وفي هذا النمط تُقرأ البيانات وتُكتب على هيئة كائنات ثنائية (bytes objects)، ويستخدم هذا النمط مع جميع الملفات التي لا تتضمّن نصوصًا.

في النمط النصي وعند قراءة الملفات يجري تحويل جميع رموز نهاية السطر (‎\n في يونكس، ‎\r\n في ويندوز) بصورة افتراضية إلى ‎\n. أما عند الكتابة إلى الملفات في هذا النمط، ترجع اللغة رموز ‎\n في الملف بأكمله وبصورة افتراضية إلى الرموز الخاصة بكل نظام تشغيل. 

لا تتسبّب عملية التعديل هذه بأي مشاكل في الملفات النصية، ولكنّها تؤدي إلى تلف البيانات الثنائية كما في ملفات ذات الصيغة JPEG أو EXE؛ لذا يجب الحرص على استخدام النمط الثنائي عند القراءة والكتابة من وإلى هذا النوع من الملفات.

ينصح باستخدام الكلمة المفتاحية with عند التعامل مع كائنات الملفات، ومن فوائدها أنّه سيُغلَق الملف بطريقة صحيحة بعد انتهاء تنفيذ الشيفرة البرمجية، حتى لو أُطلق استثناء في أي مرحلة من مراحل تنفيذ الشيفرة، إلى جانب أن استخدام with يختصر كتابة كتلة try-finally المكافئة:

>>> with open('workfile') as f:
...     read_data = f.read()
>>> f.closed
True

يجب استدعاء الدالة f.close()‎ في حال عدم استخدام الكلمة المفتاحية with وذلك لإغلاق الملف وتحرير مصادر النظام المستخدمة من قبل الملف. وإن لم يُغلق الملف باستخدام هذه الدالة فإنّ جامع القمامة في بايثون (Python's garbage collector) سيحذف الكائن في النهاية ويغلق الملف المفتوح، ولكن قد يبقى الملف مفتوحًا لفترة من الزمن قبل حدوث ذلك، وإلى جانب ذلك قد تقوم بعض أدوات بايثون بهذه المهمّة في أوقات مختلفة. لن يعود بالإمكان الوصول إلى الملف بعد إغلاقه سواء باستخدام عبارة with أو باستدعاء f.close()‎:

>>> f.close()
>>> f.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file

توابع كائنات الملفات

في الأمثلة التالية ضمن هذا القسم، سنفترض أنّنا قد أنشأنا مسبقًا كائن ملفّ يحمل الاسم f.

f.read()‎

لقراءة محتويات الملف يمكن استدعاء الدالة f.read(size)‎ والتي تقرأ كمية من البيانات وتعيدها على هيئة سلسلة نصية (في النمط النصي) أو كائنات ثنائية (في النمط الثنائي). الوسيط size هو وسيط رقمي اختياري. عند عدم استخدام هذا الوسيط أو عندما يأخذ قيمة سالبة، فإنّ الدالة ستقرأ وتعيد محتويات الملف بأكمله، ولكن يجب الانتباه إلى أنّه قد يكون حجم الملف المفتوح أكبر من الذاكرة المتوفّرة في الجهاز. أما عند تعيين قيمة الوسيط size تقرأ الدالة المقدار المطلوب من البايتات وتعيده، وعند الوصول إلى نهاية الملف تعيد الدالة f.read()‎ سلسلة نصية فارغة ('').

يوضح المثال التالي عمل هذه الدالة:

>>> f.read()
'This is the entire file.\n'
>>> f.read()
''

f.readline()‎

تقرأ الدالة f.readline()‎ سطرًا واحدًا من الملف، وتضيف الدالة محرف السطر الجديد (‎\n) في نهاية السلسلة النصية، ولا يضاف في السطر الأخير من الملف إن كان الملف لا ينتهي بمحرف السطر الجديد، ويساعد هذا على إزالة اللبس في القيمة المعادة، فلو أعادت f.readline()سلسلة نصية فارغة فهذا يعني أنّ الدالة قد وصلت إلى نهاية الملف، وإن كان السطر المقروء فارغًا فإنّ السلسلة المعادة ستحتوي على محرف السطر الجديد فقط.

>>> f.readline()
'This is the first line of the file.\n'
>>> f.readline()
'Second line of the file\n'
>>> f.readline()
''

لقراءة جميع الأسطر في الملف يمكن استخدام الحلقات التكرارية للمرور على كائن الملف، وتكون شيفرة التكرار بسيطة وسريعة وأقل استهلاكًا للذاكرة:

>>> for line in f:
...     print(line, end='')
...
This is the first line of the file.
Second line of the file

يمكن قراءة جميع أسطر الملف في قائمة يمكن استخدام list(f)‎ أو f.readlines()‎.

f.write()‎

يكتب التابع f.write(string)‎ محتويات الوسيط string في الملف ويعيد عدد الحروف المكتوبة.

>>> f.write('This is a test\n')
15

يجب تحويل أنواع البيانات الأخرى إما إلى سلسلة نصية (في النمط النصي) او كائنات ثنائية (في النمط الثنائي) لغرض كتابتها في الملف:

>>> value = ('the answer', 42)
>>> s = str(value)  # تحول الصف إلى سلسلة نصية
>>> f.write(s)
18

f.tell()‎

يعيد التابع f.tell()‎ عددًا صحيحًا يعطي الموقع الحالي لكائن الملف ضمن الملف المفتوح متمثّلًا بعدد البايتات من بداية الملف إلى الموقع الحالي في النمط الثنائي، وبعدد مبهم في النمط النصي.

ولتغيير الموقع الحالي في كائن الملف يمكن استخدام التابع f.seek(offset, from_what)‎. يُحسب الموقع بإضافة الوسيط offset إلى نقطة مرجعية، ويجري اختيار النقطة المرجعية بواسطة الوسيط from_what. تعني القيمة 0 أن عملية الحساب ستجري من بداية الملف، أما القيمة 1 فتعني استخدام الموقع الحالي في الملف كنقطة مرجعية لبدء الحساب، أما 2 فتعني أن النقطة المرجعية في نهاية الملف. يمكن الاستغناء عن قيمة from_what وستأخذ القيمة الافتراضية 0 وبذلك تأخذ الدالة بداية الملف كنقطة مرجعية.

>>> f = open('workfile', 'rb+')
>>> f.write(b'0123456789abcdef')
16
>>> f.seek(5)      # اذهب إلى البايت السادس في الملف
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2)  # اذهب إلى البايت الثالث قبل نهاية الملف
13
>>> f.read(1)
b'd'

تجري عملية البحث في الملفات النصية (أي تلك الملفات المفتوحة دون استخدام السلسلة النصية 'b') من بداية الملف فقط (يستثنى من ذلك البحث إلى نهاية الملف باستخدام الصيغة seek(0, 2)‎) ويأخذ الوسيط offset القيم المعادة من التابع f.tell()‎ أو الصفر فقط، ويؤدي استخدام أي قيم أخرى إلى سلوك غير مفهوم للدالة.

مصادر