2009-11-23 21 views
18

Trong Python, bạn có thể đọc một tập tin và tải dòng của nó vào một danh sách bằng cách sử dụngChuyển đổi r văn bản n để readlines() hoạt động như dự định

f = open('file.txt','r') 
lines = f.readlines() 

Mỗi dòng cá nhân được giới hạn bởi \n nhưng nếu nội dung của một dòng có \r thì nó không được coi là một dòng mới. Tôi cần chuyển đổi tất cả \r thành \n và nhận danh sách chính xác lines.

Nếu tôi làm .split('\r') bên trong lines Tôi sẽ nhận được danh sách bên trong danh sách.

Tôi đã nghĩ đến việc mở một tệp, thay thế tất cả \r thành \n, đóng tệp và đọc lại và sau đó sử dụng readlines() nhưng điều này có vẻ lãng phí.

Tôi nên triển khai tính năng này như thế nào?

+0

Trên thực tế, nếu bạn có một kết hợp của '\ n' và 'dòng mới \ r', và nếu sau này xảy ra trong vòng các dòng "thực" được phân tách bằng '\ n', sau đó nhận danh sách bên trong danh sách xuất hiện với tôi là Điều Đúng. –

Trả lời

44
f = open('file.txt','rU') 

này mở ra các tập tin với Python của universal newline support\r được coi là một end-of-line.

+3

... mặc dù tính năng này không được chấp nhận và không được sử dụng trong mã mới theo tài liệu Python. –

+0

Cảm ơn! Điều này hoạt động như dự định và là đủ cho tôi. Tim, điều gì sẽ là cách chính xác để thực hiện ngay bây giờ? – greye

+3

Trong Python 3.x hỗ trợ dòng mới phổ biến được bật theo mặc định, do đó bạn không phải làm bất cứ điều gì. –

3

Nếu đó là một mối quan tâm, mở ở định dạng nhị phân và chuyển đổi với mã này:

from __future__ import with_statement 

with open(filename, "rb") as f: 
    s = f.read().replace('\r\n', '\n').replace('\r', '\n') 
    lines = s.split('\n') 
Các vấn đề liên quan