คุณสามารถอ่านไฟล์ทั้งหมดและแยกบรรทัดโดยใช้str.splitlines
:
temp = file.read().splitlines()
หรือคุณสามารถตัดบรรทัดใหม่ด้วยมือ:
temp = [line[:-1] for line in file]
หมายเหตุ:โซลูชันล่าสุดนี้ใช้งานได้เฉพาะเมื่อไฟล์ลงท้ายด้วยการขึ้นบรรทัดใหม่มิฉะนั้นบรรทัดสุดท้ายจะสูญเสียอักขระ
สมมติฐานนี้เป็นจริงในกรณีส่วนใหญ่ (โดยเฉพาะอย่างยิ่งสำหรับไฟล์ที่สร้างโดยโปรแกรมแก้ไขข้อความซึ่งมักจะเพิ่มบรรทัดใหม่ที่สิ้นสุดอยู่แล้ว)
หากคุณต้องการหลีกเลี่ยงสิ่งนี้คุณสามารถเพิ่มบรรทัดใหม่ที่ท้ายไฟล์:
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]
หรือทางเลือกที่ง่ายกว่าคือstrip
ขึ้นบรรทัดใหม่แทน:
[line.rstrip('\n') for line in file]
หรือแม้ว่าจะอ่านไม่ได้
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
ซึ่งใช้ประโยชน์จากความจริงที่ว่าค่าส่งคืนของor
ไม่ใช่บูลีน แต่วัตถุที่ถูกประเมินว่าเป็นจริงหรือเท็จ
readlines
วิธีการที่เป็นจริงเทียบเท่ากับ:
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
ตั้งแต่readline()
การขึ้นบรรทัดใหม่ยังreadlines()
เก็บมันไว้
หมายเหตุ:สำหรับสมมาตรเพื่อวิธีการไม่ได้เพิ่มสิ้นสุดการขึ้นบรรทัดใหม่เพื่อผลิตสำเนาถูกต้องของในreadlines()
writelines()
f2.writelines(f.readlines())
f
f2
[l.strip('\n\r') for l in temp]
.rstrip
หรือแม้กระทั่ง และตั้งแต่ย้ำที่นี่ก็สามารถแทนin open
in temp