2010-04-04 57 views
14

Nếu chúng ta cần phải viết một dòng mới vào một tập tin, chúng ta phải mã:Tại sao ngôn ngữ Python không có phương thức writeln()?

file_output.write('Fooo line \n') 

Có bất kỳ lý do tại sao Python không có một phương pháp writeln()?

+7

Bật câu hỏi xung quanh: tại sao một số ngôn ngữ sử dụng các chức năng khác nhau cho đầu ra tùy thuộc vào việc bạn muốn bao gồm ngắt dòng kết thúc hay không? Điều này trở lại ít nhất là xa như pascal, mà tôi đã học được từ sớm, nhưng tôi đã đến để thích đại diện rõ ràng hơn trên các dòng mới trong đầu ra. – dmckee

+0

Bạn có thể xem [câu trả lời này] (http://stackoverflow.com/a/16085543/910963) từ một bài đăng khác nếu bạn cần nó – SimplyKnownAsG

Trả lời

8

Nó được bỏ qua để cung cấp một giao diện đối xứng của file phương pháp và bởi vì một writeln() sẽ làm cho không có ý nghĩa :

  • read() khớp với write() : Cả hai đều hoạt động trên dữ liệu thô
  • readlines() trận writelines(): cả hai đều hoạt động trên dây chuyền bao gồm EOLs họ
  • readline() hiếm khi được sử dụng; một iterator hiện công việc giống (trừ trường hợp bắt buộc size param)

Một writeline() (hoặc writeln()) sẽ là cơ bản giống như write(), vì nó sẽ không thêm một EOL (để phù hợp với hành vi của writelines()) .

Cách tốt nhất để bắt chước một tệp print thành tệp là sử dụng cú pháp in-tập-tin đặc biệt của Python 2.x hoặc đối số từ khóa file của hàm print(), như Daniel đề xuất.

Cá nhân, tôi thích cú pháp print >>file, ... hơn file.write('...\n').

+2

@eftinis, vì 'readline' tồn tại, tuyên bố của bạn về" đối xứng "không thực sự giữ. Việc sử dụng hiếm phương pháp 'readline' cũng không loại trừ lợi ích của nó trong các tình huống nhất định (ví dụ như các trình phân tích cú pháp có thể cần đọc một hoặc hai dòng trước). – SimplyKnownAsG

0

Có lẽ không có lý do thực sự, chỉ cần viết một dòng mới khi bạn cần, thật là dễ dàng khi sao chép giao diện tệp bằng một phương thức bổ sung để thực hiện điều đó?

+0

Bạn có thường sử dụng cú pháp được sử dụng trong câu hỏi của mình không? – systempuntoout

+0

Chức năng 'in' của Python in một dòng mới ở cuối chuỗi theo mặc định. –

+1

Để trả lời câu hỏi có ý nghĩa của bạn: hiệu quả. Xem xét (1) 'f.write (công cụ); f.write ('\ n') (2) 'f.write (stuff + '\ n')' (3) 'f.writeln (stuff)' –

19

Trong Python 2, sử dụng:

print >>file_output, 'Fooo line ' 

Trong Python 3, sử dụng:

print('Fooo line ', file=file_output) 
+0

Cảm ơn các gợi ý – systempuntoout

2

print() là hàm bạn đang tìm kiếm. Giống như phần lớn tính đa hình cốt lõi trong python, in được cung cấp bởi một hàm dựng sẵn thay vì sử dụng các phương thức (giống như len(), next(), repr() vv!).

Chức năng print() là giao diện phổ quát cũng làm cho nó linh hoạt hơn, mà không cần các đối tượng tệp phải thực hiện nó. Trong trường hợp này, nó mặc định là chấm dứt bằng cách xuống dòng, nhưng nó có thể được lựa chọn trong các cuộc gọi chức năng, ví dụ:

print("text", file=sys.stderr, end="\n") 

Trong trường hợp sử dụng đề nghị của bạn, tất cả các đối tượng tập tin sẽ phải thực hiện không chỉ là một phương pháp .write() (hiện được sử dụng bởi print()), nhưng cũng có thể là .writeln() và thậm chí có thể nhiều hơn thế nữa! Sự đa hình dựa trên chức năng này làm cho python trở nên rất phong phú, không có gánh nặng cho các giao diện (nhớ cách gõ vịt hoạt động).

Lưu ý: Mô hình này luôn là trung tâm của Python.Nó chỉ thuần khiết hơn trong các ví dụ của tôi, liên quan đến Python 3

2

Tôi cảm thấy nó nên. Điều gần nhất bạn có thể sử dụng là:

file_output.writelines([foo_msg, '\n']) 
Các vấn đề liên quan