Tôi không thể tìm ra lý do tại sao mã số 1 trả về một dòng trống thêm trong khi mã số 2 không. Ai đó có thể giải thích điều này? Sự khác biệt là một dấu phẩy phụ ở cuối mã số 2.
# Code #1 file = open('tasks.txt') for i, text in enumerate(filer, start=1): if i >= 2 and i <= 4: print "(%d) %s" % (i, text) # Code #2 file = open('tasks.txt') for i, text in enumerate(filer, start=1): if i >= 2 and i <= 4: print "(%d) %s" % (i, text),Đây là nội dung của tệp tác vụ của tôi.txt:
line 1 line 2 line 3 line 4 line 5Kết quả từ mã số 1:
(2) line 2 (3) line 3 (4) line 4Kết quả từ mã số 2 (kết quả mong muốn):
(2) line 2 (3) line 3 (4) line 4
người gửi
Phù vàng 141K35 Huy hiệu vàng206 Huy hiệu đồng35 gold badges206 silver badges231 bronze badges
Khi được hỏi ngày 4 tháng 5 năm 2012 lúc 21:21May 4, 2012 at 21:21
Trailing line 1 line 2 line 3 line 4 line 5 0 trong câu lệnh in sẽ làm bất ngờ một nguồn cấp dữ liệu. Câu lệnh in đầu tiên của bạn không có một câu nói, thứ hai của bạn.
Đầu vào bạn đọc vẫn chứa line 1 line 2 line 3 line 4 line 5 1 gây ra thêm dòng. Một cách để bù đắp cho nó là ngăn chặn việc in phát hành một dòng của riêng mình bằng cách sử dụng dấu phẩy kéo dài. Ngoài ra, và được cho là một cách tiếp cận tốt hơn, bạn có thể tước dòng mới trong đầu vào khi bạn đọc nó (ví dụ: bằng cách sử dụng line 1 line 2 line 3 line 4 line 5 2)
Đã trả lời ngày 4 tháng 5 năm 2012 lúc 21:24May 4, 2012 at 21:24
LevonlevonLevon
Huy hiệu vàng 133K3333 gold badges198 silver badges187 bronze badges
3
Câu trả lời chung tốt nhất cho vấn đề này là loại bỏ dòng mới (nếu có!) Ngay khi bạn đọc nó:general answer to this problem is to strip the trailing newline (if any!) as soon as you read it:
f = open('tasks.txt') for i, text in enumerate(f, start=1): text = text.rstrip('\n') if i >= 2 and i <= 4: print "(%d) %s" % (i, text)Bằng cách đó, bạn lấy ra đầu ra của mình khỏi đầu vào của mình ... Mã đầu ra của bạn có thể cách xa 20 dòng hoặc trong một hàm/phương thức khác hoặc thậm chí trong một mô -đun khác. Bồi thường cho một dòng mới trong đầu vào bằng cách sử dụng dấu phẩy ở cuối câu lệnh in không phải là một giải pháp mạnh mẽ.
Đã trả lời ngày 4 tháng 5 năm 2012 lúc 21:51May 4, 2012 at 21:51
John Machinjohn MachinJohn Machin
79,8K11 Huy hiệu vàng138 Huy hiệu bạc185 Huy hiệu đồng11 gold badges138 silver badges185 bronze badges
Để không có một dòng trống, bạn cần line 1 line 2 line 3 line 4 line 5 0 ở cuối câu lệnh in
Example:
for i in range(10): print i, >>>0 1 2 3 4 5 6 7 8 9 for i in range(10): print i >>> 0 1 2 3 4 5 6 7 8 9
Ben
50.8K36 Huy hiệu vàng126 Huy hiệu bạc145 Huy hiệu đồng36 gold badges126 silver badges145 bronze badges
Đã trả lời ngày 4 tháng 5 năm 2012 lúc 21:30May 4, 2012 at 21:30
Ganlawganlawganlaw
1.2754 huy hiệu vàng18 Huy hiệu bạc32 Huy hiệu đồng4 gold badges18 silver badges32 bronze badges
1
Có một sửa chữa rất đơn giản cho điều này.
Giả sử tôi có, đối với các đối số, một tệp .txt (được gọi là số.txt) mà tôi đang đọc từ các giá trị:
234234Sau đó, bằng cách sử dụng mã sau:
filename = numbers.txt with open(filename) as file_object: for line in file_object: print(line)Sẽ cung cấp cho bạn dòng trống thêm vì bạn đang gặp vấn đề. Nhưng với một thay đổi nhỏ, bạn có thể loại bỏ các dòng trống thêm bằng phương thức rstrip (). Vì vậy, mã trở thành:
filename = numbers.txt with open(filename) as file_object: for line in file_object: print(line.rstrip())Bây giờ bạn sẽ nhận được kết quả của mình mà không có những đường trống khó chịu giữa chúng!
Đã trả lời ngày 16 tháng 5 năm 2017 lúc 9:35May 16, 2017 at 9:35
Baba.SBaba.SBaba.S
3042 Huy hiệu bạc12 Huy hiệu Đồng2 silver badges12 bronze badges
Lặp lại các tệp giữ cho các dòng mới từ tệp. Vì vậy, có một dòng mới từ bản in của bạn và một từ chuỗi.
Một cách tốt để kiểm tra ngữ nghĩa tệp là với line 1 line 2 line 3 line 4 line 5 4. Hãy xem:
>>> from StringIO import StringIO >>> x = StringIO("abc\ncde\n") >>> for line in x: print repr(line) ... 'abc\n' 'cde\n'Dấu phẩy triệt tiêu dòng mới từ bản in, như Levon nói, để chỉ có dòng mới từ chuỗi.
Tôi tước dòng mới từ các chuỗi bằng line 1 line 2 line 3 line 4 line 5 5. Nó được loại bỏ bất kỳ dòng mới nào ở bất kỳ định dạng hiện đại nào (UNIX, Windows hoặc Old Mac OS). Vì vậy, bạn có thể làm line 1 line 2 line 3 line 4 line 5 6 thay thế.
Đã trả lời ngày 4 tháng 5 năm 2012 lúc 21:25May 4, 2012 at 21:25
Devin Jeanpierredevin JeanpierreDevin Jeanpierre
Phim huy hiệu vàng 90,5k44 gold badges55 silver badges79 bronze badges
3