Python - متى يتم استخدام الملف مقابل الفتح

StackOverflow https://stackoverflow.com/questions/112970

  •  02-07-2019
  •  | 
  •  

سؤال

ما الفرق بين file و open في بايثون؟متى يجب أن أستخدم أي واحد؟(قل أنا في 2.5)

هل كانت مفيدة؟

المحلول

يجب عليك دائما استخدام open().

كما توثيق تنص على:

عند فتح ملف ، من الأفضل استخدام Open () بدلاً من استدعاء هذا المنشئ مباشرة.الملف أكثر ملاءمة لكتابة الاختبار (على سبيل المثال ، كتابة "Isinstance (F ، file)").

أيضًا، file() تم إزالته منذ بايثون 3.0.

نصائح أخرى

سببان:فلسفة بايثون "يجب أن تكون هناك طريقة واحدة للقيام بذلك" و 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() لأن هذا قد يتغير في المستقبل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top