2010-05-03 36 views
34

Tôi cần mở tệp để đọc và viết. Nếu tập tin không được tìm thấy, nó sẽ được tạo ra. Nó cũng nên được coi là nhị phân cho Windows. Bạn có thể cho tôi biết chuỗi chế độ tệp tôi cần sử dụng cho điều này không?Chế độ tệp để tạo + đọc + nối + nhị phân

Tôi đã thử 'r + ab' nhưng điều đó không tạo ra các tệp nếu chúng không được tìm thấy.

Cảm ơn

Trả lời

56

Chế độ là ab+ được ngụ ý và 'a'ppend và (' w'rite '+' 'r'ead) là không cần thiết. Kể từ khi CPython (ví dụ thường xuyên python) file được dựa trên C stdio FILE loại, đây là những dòng có liên quan từ fopen (3) xem man page:

  • w + mở cho đọc và viết. Tệp được tạo nếu nó không tồn tại, nếu không nó sẽ bị cắt ngắn. Luồng được đặt ở số bắt đầu của tệp.

  • a + Mở để đọc và phụ thêm (viết ở cuối tệp). Tệp được tạo nếu tệp không tồn tại . Vị trí tệp ban đầu để đọc nằm ở đầu tệp , nhưng đầu ra luôn là được thêm vào cuối tệp.

Với dấu "b" được bật để làm cho DOS vui vẻ. Có lẽ bạn muốn làm điều gì đó như thế này:

>>> f = open('junk', 'ab+') 
>>> f 
<open file 'junk', mode 'ab+' at 0xb77e6288> 
>>> f.write('hello\n') 
>>> f.seek(0, os.SEEK_SET) 
>>> f.readline() 
'hello\n' 
>>> f.write('there\n') 
>>> f.seek(0, os.SEEK_SET) 
>>> f.readline() 
'hello\n' 
>>> f.readline() 
'there\n' 
+2

Hoạt động. Cũng cảm ơn vì đã chỉ ra os.SEEK_SET trong ví dụ của bạn. Tôi nghĩ rằng tôi đã cố gắng mở tập tin với một + trước nhưng không thể đọc bất cứ điều gì ra khỏi nó. Đã không vượt qua tâm trí của tôi dòng được đặt ở phần cuối của tập tin ... –

+1

Hãy nhớ rằng bạn * phải * * luôn luôn * tìm kiếm giữa đọc và viết, hoặc viết và đọc. Quên để làm như vậy thường sẽ làm việc trên hầu hết các hệ thống, nhưng không phải (ví dụ) trên Windows. –

8
open("filename", "a+b") 

nên làm việc. Nó sẽ mở một tệp nhị phân trong chế độ chắp thêm/cập nhật.

Các vấn đề liên quan