2011-07-29 38 views
6

Tôi chỉ có một suy nghĩ đi qua và tìm ra nơi tốt hơn để hỏi sau đó ngay tại đây. Ra khỏi tò mò, không ai biết nếu mở một tệp để append, như thế này:Mở một tập tin để gắn thêm

file_name = "abc" 
file_handle = open(file_name,"a") 

về cơ bản là giống như mở một tập tin cho văn bản và tìm cách cuối cùng:

file_name = "abc" 
file_handle = open(file_name,"w") 
file_handle.seek(0,2) # 0 for offset, 2 for end-of-file 

Tôi chỉ cần tự hỏi nếu mở một tập tin cho phụ thêm về cơ bản là làm khối thứ hai, mở để viết tiếp theo là một tìm kiếm vào cuối của tập tin, đằng sau hậu trường.

+0

Bạn có thể phân biệt sự khác biệt như thế nào? –

Trả lời

15

Sau khi phát một chút trong thiết bị đầu cuối của mình, tôi có thể nói sự khác biệt trên Ubuntu ubuntu 11.04 bằng python 2.7.1.

Mở bằng 'w' truncates (tức là xóa nội dung của) tệp ngay sau khi tệp được mở. Nói cách khác, chỉ cần mở tệp bằng open('file.txt', 'w') và thoát khỏi các lá phía sau tệp trống.

Mở bằng 'a' để nguyên nội dung của tệp. Vì vậy, mở với open('file.txt', 'a') và thoát khỏi tệp không thay đổi.

Điều này cũng áp dụng cho các tùy chọn cập nhật để mở. Lệnh open('file.txt', 'w+') sẽ để lại một tệp trống, trong khi các lệnh open('file.txt', 'r+')open('file.txt', 'a+') sẽ để lại các tệp không thay đổi.

Sự khác biệt giữa các tùy chọn 'r +' và 'a +' là hành vi mà những người khác đã đề xuất. Tùy chọn 'r +' cho phép bạn viết bất cứ nơi nào trong tệp, trong khi 'a +' tất cả ghi vào cuối tệp, bất kể bạn đặt vị trí hiện tại của tệp ở đâu.

Nếu bạn muốn xem chi tiết hơn, theo số python documentation chức năng mở sẽ chấp nhận các chế độ tương tự như the fopen function của stdio C.

+0

điểm tốt với đơn 'w'; nó phải là 'r +' nếu chúng ta muốn mở tập tin để cập nhật mà không cắt xén nó. – tomasz

+0

@tomasz Không chắc bạn đang nói về điều gì. Tuy nhiên, python không có tùy chọn 'rw' để mở. Trừ khi bạn nói về các tùy chọn cập nhật ('r +', 'w +', v.v.) có cùng tác dụng như đã nêu ở trên. – cledoux

+0

karategeek6: bạn nói đúng, tôi đã chỉnh sửa bình luận của tôi với 'r +' ngay sau khi tôi rời khỏi nó! – tomasz

2

Không thực sự. Sử dụng phụ thêm buộc bất kỳ ghi nào để đi đến cuối tệp, nơi bạn có thể tìm kiếm vị trí khác bằng ghi.

1

Tùy thuộc vào hệ thống bạn đang làm việc; việc mở một tệp có gắn thêm cờ thường có nghĩa là bạn sẽ ghi vào cuối tệp bất kể vị trí ghi con trỏ. Nói cách khác, nó có thể có nghĩa là hệ điều hành của bạn phải thực hiện tìm kiếm đến cuối của tập tin trước khi viết hoặc chỉ tìm kiếm con trỏ đến cuối sau khi mở. Bạn có thể dễ dàng kiểm tra xem nó hoạt động như thế nào trong môi trường của bạn, nhưng hành vi được bảo đảm duy nhất là tìm kiếm kết thúc sau khi mở.

EDIT: Như những người khác đã chỉ ra, w gắn cờ hiệu quả cắt bớt tệp. Nếu bạn muốn mở nó để cập nhật mà không xóa nội dung hiện tại, bạn sẽ phải sử dụng cờ r+ (nhưng sau đó đọc sẽ được cho phép không đúng với a).

2

"W" sẽ xóa dữ liệu nội dung và sau đó tìm đến vị trí cuối cùng. Vì vậy, bạn sẽ kết thúc bằng một tệp rỗng với một con trỏ tại BOF chứ không phải EOF. Sử dụng "A" để giữ dữ liệu cũ.

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