open () في Python لا يقوم بإنشاء ملف إذا لم يكن موجودًا


6 Answers

ميزة الأسلوب التالي هو أن الملف مغلق بشكل صحيح في نهاية الكتلة ، حتى إذا تم رفع استثناء على الطريق. إنها تعادل try-finally ، لكن أقصر بكثير.

with open("file.dat","a+") as f:
    f.write(...)
    ...

a + يتم فتح ملف لكل من الإضافة والقراءة. يكون مؤشر الملف في نهاية الملف إذا كان الملف موجودًا. يفتح الملف في وضع الإلحاق. إذا كان الملف غير موجود ، يقوم بإنشاء ملف جديد للقراءة والكتابة. - صيغ ملفات بايثون

تسعى () طريقة يحدد الموقف الحالي للملف.

f.seek(pos [, (0|1|2)])
pos .. position of the r/w pointer
[] .. optionally
() .. one of ->
  0 .. absolute position
  1 .. relative position to current
  2 .. relative position from end

يُسمح باستخدام أحرف "rwab +" فقط ؛ يجب أن يكون هناك واحد بالضبط من "روى" - راجع مسألة تجاوز المكدس بالتفصيل سؤال صيغ ملف بايثون .

Question

ما هي أفضل طريقة لفتح ملف للقراءة / الكتابة إذا كان موجودًا ، أو إذا لم يكن موجودًا ، ثم قم بإنشائه وافتحه للقراءة / الكتابة؟ من ما قرأت ، file = open('myfile.dat', 'rw') يجب أن تفعل هذا ، أليس كذلك؟

إنه لا يعمل بالنسبة لي (Python 2.6.2) وأنا أتساءل عما إذا كانت مشكلة في الإصدار ، أو ليس من المفترض أن تعمل هكذا أو ماذا.

خلاصة القول هي ، أنا فقط بحاجة إلى حل للمشكلة. أشعر بالفضول حيال الأشياء الأخرى ، ولكن كل ما أريده هو طريقة لطيفة للقيام بالجزء الافتتاحي.

UPDATE: تم كتابة الدليل المرفق من قبل المستخدم والمجموعة ، وليس غيرها (أنا على نظام لينكس ... إذن أذونات 775 بكلمات أخرى) ، وكان الخطأ الدقيق:

IOError: لا يوجد ملف أو دليل.




أعتقد أنه r + وليس rw . أنا مجرد بداية ، وهذا ما رأيته في الوثائق.




إجابتي:

file_path = 'myfile.dat'
try:
    fp = open(file_path)
except IOError:
    # If not exists, create the file
    fp = open(file_path, 'w+')



هل تريد كتابة البيانات إلى ملف ، ولكن فقط إذا لم تكن موجودة بالفعل؟

يتم حل هذه المشكلة بسهولة باستخدام وضع x غير معروف لفتح () بدلاً من وضع w المعتاد. فمثلا:

 >>> with open('somefile', 'wt') as f:
 ...     f.write('Hello\n')
...
>>> with open('somefile', 'xt') as f:
...     f.write('Hello\n')
...
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'somefile'
  >>>

إذا كان الملف هو الوضع الثنائي ، استخدم الوضع xb بدلاً من xt.




ضع w + لكتابة الملف ، أو اقتطاعه إذا كان موجودًا ، r + لقراءة الملف ، وإنشاء ملف إذا لم يكن موجودًا ولكن لا يكتب (والعودة null) أو + لإنشاء ملف جديد أو إلحاق ملف موجود.




'''
w  write mode
r  read mode
a  append mode

w+  create file if it doesn't exist and open it in write mode
r+  create file if it doesn't exist and open it in read mode
a+  create file if it doesn't exist and open it in append mode
'''

مثال:

file_name = 'my_file.txt'
f = open(file_name, 'w+')  # open file in write mode
f.write('python rules')
f.close()

آمل أن يساعد هذا. [لمعلوماتك أستخدم الإصدار 3.6.2 من بيثون




من الممارسات الجيدة استخدام ما يلي:

import os

writepath = 'some/path/to/file.txt'

mode = 'a' if os.path.exists(writepath) else 'w'
with open(writepath, mode) as f:
    f.write('Hello, world!\n')



Related