Bạn có thể đọc toàn bộ tập tin và chia dòng bằng cách sử dụng str.splitlines
:
temp = file.read().splitlines()
Hoặc bạn có thể tước dòng mới bằng tay:
temp = [line[:-1] for line in file]
Lưu ý: giải pháp cuối cùng này chỉ hoạt động nếu tệp kết thúc bằng một dòng mới, nếu không dòng cuối cùng sẽ mất một ký tự.
Giả định này là đúng trong hầu hết các trường hợp (đặc biệt đối với các tệp được tạo bởi trình soạn thảo văn bản, thường làm thêm một newline kết thúc anyway).
Nếu bạn muốn tránh điều này, bạn có thể thêm một dòng mới vào cuối tập tin:
with open(the_file, 'r+') as f:
f.seek(-1, 2) # go at the end of the file
if f.read(1) != '\n':
# add missing newline if not already present
f.write('\n')
f.flush()
f.seek(0)
lines = [line[:-1] for line in f]
Hoặc thay thế đơn giản hơn là strip
thay vào dòng mới:
[line.rstrip('\n') for line in file]
Hoặc thậm chí, mặc dù khá khó đọc:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
Việc khai thác thực tế là giá trị trả về của or
không phải là boolean, mà là đối tượng được đánh giá đúng hay sai.
Các readlines
phương pháp thực sự là tương đương với:
def readlines(self):
lines = []
for line in iter(self.readline, ''):
lines.append(line)
return lines
# or equivalently
def readlines(self):
lines = []
while True:
line = self.readline()
if not line:
break
lines.append(line)
return lines
Kể từ khi readline()
giữ dòng mới cũng readlines()
giữ nó.
Lưu ý: đối với đối xứng để readlines()
các writelines()
phương pháp nào không thêm kết thúc dòng mới, do đó f2.writelines(f.readlines())
tạo ra một bản sao chính xác của f
trong f2
.
[l.strip('\n\r') for l in temp]
. Hoặc thậm chírstrip
. Và kể từ khi lặp ở đây, nó có thể đượcin open
thay thếin temp
.