Đây là một chút gây hiểu lầm. open()
làm chế độ arg chấp nhận bất kỳ ký tự nào trong khi bạn chuyển một ký tự hợp lệ, ví dụ: "w,r,b,+,a"
.
Vì vậy, bạn có thể viết: open("fname", "w+ANYTHINGYOUWANT")
. Nó sẽ mở tệp dưới dạng open("fname", "w+")
. Và open("fname", "rANYTHINGYOUWANT")
. sẽ mở tệp dưới dạng open("fname", "w+")
.
Về chữ "U" cờ:
Ngoài các tiêu chuẩn fopen() giá trị chế độ có thể 'U' hoặc 'RU'. Python thường được xây dựng với hỗ trợ dòng mới phổ quát; cung cấp 'U' mở tệp dưới dạng tệp văn bản nhưng các dòng có thể bị chấm dứt bởi bất kỳ điều sau: quy ước cuối dòng Unix '\ n', quy ước Macintosh '\ r' hoặc Windows quy ước '\ r \ n'. Tất cả các đại diện bên ngoài này được chương trình Python xem là '\ n'. Nếu Python được tạo mà không có dòng mới phổ quát, hỗ trợ chế độ có chữ 'U' là giống như chế độ văn bản thông thường. Lưu ý rằng các đối tượng tệp được mở cũng có thuộc tính được gọi là dòng mới có giá trị là Không (nếu không có dòng mới), '\ n', '\ r', '\ r \ n' hoặc một tuple chứa tất cả các loại dòng mới được nhìn thấy.
Như bạn có thể đọc trong tài liệu Python https://docs.python.org/2/library/functions.html#open
EDIT:
D: Chỉ định một tập tin tạm thời. Nó sẽ bị xóa khi tập tin cuối cùng con trỏ bị đóng.
như bạn có thể đọc trong liên kết @ tmr232.
Các c, n, t, S, R, T và D tùy chọn chế độ là Microsoft mở rộng cho fopen và _fdopen và không nên được sử dụng khi ANSI Portability là mong muốn
Cập nhật thêm:
Tôi đề xuất gửi hiện tượng dưới dạng lỗi, vì mở tệp dưới dạng chỉ đọc với cờ "r", sau đó cho phép xóa sau/qua đóng nó thêm một ký tự đơn như "D", thậm chí vô tình là một vấn đề an ninh nghiêm trọng, tôi nghĩ vậy.
Nhưng, nếu điều này có một số chức năng không thể tránh khỏi, vui lòng thông báo cho tôi.
'mở ('text.txt', 'rD')' đối với tệp hiện có trên Linux không gây ra bất kỳ lỗi nào cho tôi, mặc dù tệp không bị xóa khi đóng. Tôi thực sự ngạc nhiên rằng nếu đúng, hành vi này là [không ghi lại] (https://docs.python.org/2/library/functions.html#open). Cờ 'U' được ghi lại. – rth
Chỉ cần sao chép điều này trên Windows. Điều này thực sự rất kỳ quặc. – tmr232
Tôi đã phạm sai lầm tương tự một lúc trước. Đề cập đến là [ở đây] (https://github.com/python/cpython/blob/2.7/Objects/fileobject.c#L209). Trong fileobject và không phải là io. – tmr232