Python - متى يتم استخدام الملف مقابل الفتح
سؤال
ما الفرق بين file
و open
في بايثون؟متى يجب أن أستخدم أي واحد؟(قل أنا في 2.5)
نصائح أخرى
سببان:فلسفة بايثون "يجب أن تكون هناك طريقة واحدة للقيام بذلك" و file
سوف يذهب بعيدا.
file
هو النوع الفعلي (باستخدام على سبيل المثال. file('myfile.txt')
يدعو منشئه). open
هي وظيفة مصنع تقوم بإرجاع كائن ملف.
في بيثون 3.0 file
سوف ينتقل من كونه مدمجًا إلى أن يتم تنفيذه بواسطة فئات متعددة في io
مكتبة (تشبه إلى حد ما Java مع أجهزة القراءة المخزنة مؤقتًا، وما إلى ذلك)
file()
هو نوع، مثل int أو قائمة. open()
هي وظيفة لفتح الملفات، وسوف ترجع ملف file
هدف.
هذا مثال على متى يجب عليك استخدام open:
f = open(filename, 'r')
for line in f:
process(line)
f.close()
هذا مثال على متى يجب عليك استخدام الملف:
class LoggingFile(file):
def write(self, data):
sys.stderr.write("Wrote %d bytes\n" % len(data))
super(LoggingFile, self).write(data)
كما ترون، هناك سبب وجيه لوجود كليهما، وحالة استخدام واضحة لكليهما.
من الناحية الوظيفية، الاثنان متماثلان؛ open
سوف اتصل file
على أية حال، فإن الاختلاف حاليًا هو مسألة أسلوب.ال مستندات بايثون يوصي باستخدام open
.
عند فتح ملف، يفضل استخدام open() بدلاً من استدعاء منشئ الملف مباشرةً.
والسبب هو أنه في الإصدارات المستقبلية لا يُضمن أن تكون هي نفسها (open
سوف تصبح وظيفة مصنع، والتي تقوم بإرجاع كائنات من أنواع مختلفة اعتمادًا على المسار الذي تفتحه).
استخدم open() فقط لفتح الملفات.تتم إزالة الملف () فعليًا في الإصدار 3.0، وهو مهمل في الوقت الحالي.لقد كانت بينهما علاقة غريبة نوعًا ما، لكن file() سيتوقف الآن، لذا لا داعي للقلق بعد الآن.
ما يلي هو من مستندات Python 2.6.[الأشياء القوسية] تمت إضافتها بواسطتي.
عند فتح ملف، من الأفضل استخدام open() بدلاً من استدعاء مُنشئ [file()] مباشرة.الملف أكثر ملاءمة لكتابة الاختبار (على سبيل المثال، كتابة isinstance(f, file)
وفقًا للسيد فان روسوم، على الرغم من أن open() هو حاليًا اسم مستعار لـ file()، إلا أنه يجب عليك استخدام open() لأن هذا قد يتغير في المستقبل.