các tài liệu một cách rõ ràng nói không sử dụng nó khi viết vào một tập tin
Đây không phải là chính xác, doc nói không sử dụng nó trong văn bản chế độ.
os.linesep
được sử dụng khi bạn muốn lặp qua các dòng của tệp văn bản. Máy quét nội bộ nhận dạng os.linesep
và thay thế bằng một "\ n" đơn.
Để minh hoạ, chúng tôi viết một tập tin nhị phân, trong đó có 3 dòng cách nhau dấu "\ r \ n" (Windows delimiter):
import io
filename = "text.txt"
content = b'line1\r\nline2\r\nline3'
with io.open(filename, mode="wb") as fd:
fd.write(content)
Nội dung của tập tin nhị phân là:
with io.open(filename, mode="rb") as fd:
for line in fd:
print(repr(line))
NB: Tôi đã sử dụng chế độ "rb" để đọc tệp dưới dạng tệp nhị phân.
tôi nhận được:
b'line1\r\n'
b'line2\r\n'
b'line3'
Nếu tôi đọc nội dung của tập tin bằng cách sử dụng chế độ văn bản, như thế này:
with io.open(filename, mode="r", encoding="ascii") as fd:
for line in fd:
print(repr(line))
tôi nhận được:
'line1\n'
'line2\n'
'line3'
Delimiter được thay thế bằng "\ n".
Các os.linesep
cũng được sử dụng trong chế độ ghi: bất kỳ ký tự "\ n" được chuyển thành các dòng phân cách mặc định hệ thống: "\ r \ n" trên Windows, "\ n" trên POSIX vv
Với chức năng io.open
, bạn có thể buộc bộ tách dòng thành bất kỳ thứ gì bạn muốn.
Ví dụ: làm thế nào để viết một file Windows văn bản:
with io.open(filename, mode="w", encoding="ascii", newline="\r\n") as fd:
fd.write("one\ntwo\nthree\n")
Nếu bạn đọc tập tin này trong chế độ văn bản như thế này:
with io.open(filename, mode="rb") as fd:
content = fd.read()
print(repr(content))
Bạn nhận:
b'one\r\ntwo\r\nthree\r\n'
Nó wouldn 't làm việc nếu mã hóa ascii không tương thích. 'len ('\ n'.encode (' utf-16 '))' là 4 –