Nếu tập tin của bạn phù hợp trong bộ nhớ, bạn có thể thử một cái gì đó như thế này:
f = open('somefile.txt')
lines = f.read().splitlines()
for current_line, next_line in zip(lines, lines[1:]):
print current_line
print next_line
print '-------'
Đoạn mã trên về cơ bản đọc tất cả các dòng và sử dụng zip
để tạo ra một danh sách các hàng có chứa các dòng hiện tại và tiếp theo một.
Edit: Ngoài ra, đối với các file dài, bạn có thể sử dụng itertools
thư viện như sau:
import itertools
f = open('somefile.txt')
i1, i2 = itertools.tee(f)
lines = itertools.izip(i1, itertools.islice(i2, 1, None))
for current_line, next_line in lines:
print current_line
print next_line
print '-------'
Trong trường hợp này:
itertools.tee
được sử dụng để tạo ra hai vòng lặp indenpendent (một cho dòng điện và một cho dòng tiếp theo) sử dụng trình lặp tệp gốc.
itertools.slice
được sử dụng để bắt đầu trình lặp dòng tiếp theo trong dòng thứ hai.
itertools.izip
được sử dụng để kết hợp các kết quả của cả hai trình lặp dòng theo dòng trong một bộ.
Chỉnh sửa 2: Theo đề nghị của @eyquem, bạn cũng có thể mở các tập tin hai lần:
import itertools
f = open('somefile.txt')
g = open('somefile.txt')
lines = itertools.izip(f, itertools.islice(g, 1, None))
for current_line, next_line in lines:
print current_line
print next_line
print '-------'
Hoặc bằng cách nào đó tôi có thể kiểm tra xem dòng tiếp theo có tồn tại hay không trước khi đọc nó? –
Bạn có ý gì khi 'đặt nó trong dòng hiện tại' ??? Bạn muốn sửa đổi một dòng ghi trên ổ đĩa cứng với dữ liệu có trong dòng phía trước ?? – eyquem