Hướng dẫn python go back to previous line in file - python quay lại dòng trước trong tệp

Tôi cần lấy giá trị của dòng trước trong một tệp và so sánh nó với dòng hiện tại khi tôi lặp đi lặp lại thông qua tệp. Tệp rất lớn nên tôi không thể đọc toàn bộ hoặc ngẫu nhiên truy cập một số dòng với linecache vì chức năng thư viện vẫn đọc toàn bộ tệp vào bộ nhớ.

Chỉnh sửa Tôi rất xin lỗi vì tôi đã quên đề cập đến việc tôi phải đọc tệp một cách ngược. I'm so sorry I forgot the mention that I have to read the file backwardly.

EDIT2

Tôi đã thử như sau:

 f = open["filename", "r"]
 for line in reversed[f.readlines[]]: # this doesn't work because there are too many lines to read into memory

 line = linecache.getline["filename", num_line] # this also doesn't work due to the same problem above. 

Đã hỏi ngày 28 tháng 6 năm 2013 lúc 20:28Jun 28, 2013 at 20:28

Lim H.Lim H.Lim H.

9.6249 huy hiệu vàng48 Huy hiệu bạc74 Huy hiệu đồng9 gold badges48 silver badges74 bronze badges

14

Chỉ cần lưu trước đó khi bạn lặp lại đến lần tiếp theo

prevLine = ""
for line in file:
    # do some work here
    prevLine = line

Điều này sẽ lưu trữ dòng trước đó trong prevLine trong khi bạn đang lặp lại

Chỉnh sửa rõ ràng OP cần đọc tệp này ngược: apparently OP needs to read this file backwards:

aaand sau một giờ nghiên cứu, tôi đã thất bại nhiều lần để làm điều đó trong các ràng buộc bộ nhớ

Ở đây bạn đi Lim, anh chàng đó biết mình đang làm gì, đây là ý tưởng tốt nhất của anh ta:

Cách tiếp cận chung #2: Đọc toàn bộ tệp, lưu trữ vị trí của các dòng

Với cách tiếp cận này, bạn cũng đọc qua toàn bộ tệp một lần, nhưng thay vì lưu trữ toàn bộ tệp [tất cả văn bản] trong bộ nhớ, bạn chỉ lưu trữ các vị trí nhị phân bên trong tệp nơi mỗi dòng bắt đầu. Bạn có thể lưu trữ các vị trí này trong một cấu trúc dữ liệu tương tự như một vị trí lưu trữ các dòng trong cách tiếp cận đầu tiên.

Bất cứ khi nào bạn muốn đọc dòng X, bạn phải đọc lại dòng từ tệp, bắt đầu ở vị trí bạn lưu trữ cho đầu dòng đó.

Ưu điểm: gần như dễ thực hiện như cách tiếp cận đầu tiên: có thể mất một thời gian để đọc các tệp lớn

Đã trả lời ngày 28 tháng 6 năm 2013 lúc 20:46Jun 28, 2013 at 20:46

StephanstephanStephan

15.1k7 Huy hiệu vàng34 Huy hiệu bạc61 Huy hiệu Đồng7 gold badges34 silver badges61 bronze badges

11

@Lim, đây là cách tôi sẽ viết nó [trả lời các bình luận]

def do_stuff_with_two_lines[previous_line, current_line]:
    print "--------------"
    print previous_line
    print current_line

my_file = open['my_file.txt', 'r']

if my_file:
    current_line = my_file.readline[]

for line in my_file:

    previous_line = current_line
    current_line = line

    do_stuff_with_two_lines[previous_line, current_line]

Đã trả lời ngày 28 tháng 6 năm 2013 lúc 20:56Jun 28, 2013 at 20:56

DianadianaDiana

1.2619 huy hiệu bạc21 Huy hiệu đồng9 silver badges21 bronze badges

1

Tôi sẽ viết một trình tạo đơn giản cho tác vụ:

def pairwise[fname]:
    with open[fname] as fin:
        prev = next[fin]
        for line in fin:
            yield prev,line
            prev = line

Hoặc, bạn có thể sử dụng công thức pairwise từ itertools:

def pairwise[iterable]:
    "s -> [s0,s1], [s1,s2], [s2, s3], ..."
    a, b = itertools.tee[iterable]
    next[b, None]
    return itertools.izip[a, b]

Đã trả lời ngày 28 tháng 6 năm 2013 lúc 20:29Jun 28, 2013 at 20:29

Mgilsonmgilsonmgilson

291K63 Huy hiệu vàng610 Huy hiệu bạc677 Huy hiệu Đồng63 gold badges610 silver badges677 bronze badges

Cách bảo Python quay lại dòng trước với các ví dụ về mã

Trong phiên này, chúng tôi sẽ cố gắng giải quyết cách nói với Python quay trở lại câu đố dòng trước bằng cách sử dụng ngôn ngữ máy tính. Mã theo sau phục vụ để minh họa điểm này.

def main[]: #defines the area in indents that will be triggered with main[]#
print['hi']
yn = input['Wanna loop back to the start? ']
if yn = 'yes':
main[] #loops back to where we defined main#
main[] #This starts the main loop, without this, main would just be defined but not run#

Nhiều ví dụ trong thế giới thực minh họa cách đối phó với cách nói với Python quay trở lại vấn đề dòng trước đó.

Làm thế nào để bạn quay lại một dòng cụ thể trong Python?

Python không cho phép bạn quay lại một số dòng cụ thể và ngay cả khi nó đã xảy ra, bạn không nên tận dụng khả năng đó vì nó dẫn đến các chương trình không thể giải quyết được. Thay vào đó, hãy tìm hiểu cách sử dụng các chức năng và cấu trúc mã của bạn để các chức năng có ý nghĩa.14-tháng 5 năm 2013

Làm cách nào để quay lại mã sớm hơn trong Python?

Chúng ta có thể lặp lại bắt đầu bằng cách sử dụng câu lệnh luồng điều khiển, tức là, một câu lệnh WHIME. Để làm điều đó, hãy bọc chương trình hoàn chỉnh trong một vòng lặp thời gian luôn đúng. Cái này là cái gì? Hơn nữa, thêm một câu lệnh tiếp tục tại một điểm mà bạn muốn bắt đầu chương trình từ đầu.19-tháng 1-2021

Làm thế nào sử dụng phá vỡ trong Python?

'Break' trong Python là một câu lệnh điều khiển vòng lặp. Nó được sử dụng để kiểm soát chuỗi của vòng lặp. Giả sử bạn muốn chấm dứt một vòng lặp và bỏ qua mã tiếp theo sau vòng lặp; Phá vỡ sẽ giúp bạn làm điều đó. Một kịch bản điển hình của việc sử dụng sự phá vỡ trong Python là khi một điều kiện bên ngoài kích hoạt sự chấm dứt của vòng lặp.23-Aug-2022

Làm thế nào để bạn thay đổi một dòng trong Python?

Trong Python, ký tự dòng mới \ n, được sử dụng để tạo ra một dòng mới. Khi được chèn vào một chuỗi, tất cả các ký tự sau khi ký tự được thêm vào một dòng mới. Về cơ bản, sự xuất hiện của \ \ n, chỉ ra rằng dòng kết thúc ở đây và các ký tự còn lại sẽ được hiển thị trong một dòng mới.05-AUG-2022

Hàm trả về trong Python là gì?

Câu lệnh Python Return là một câu lệnh đặc biệt mà bạn có thể sử dụng bên trong một hàm hoặc phương thức để gửi kết quả của hàm trở lại cho người gọi. Một câu lệnh trả về bao gồm từ khóa trả về theo sau là giá trị trả về tùy chọn. Giá trị trả về của hàm Python có thể là bất kỳ đối tượng Python nào.

Bạn có thể trở lại phá vỡ trong Python không?

Không, nó không hoạt động như vậy thật không may. Bạn sẽ phải kiểm tra giá trị trả về và sau đó quyết định thoát ra khỏi vòng lặp trong người gọi. Hiển thị hoạt động trên bài viết này. Break là một từ khóa nhưng không phải là một đối tượng nên nó được người phiên dịch đối xử khác nhau, link.17-feb-2017

__ Main __ có nghĩa là gì trong Python?

Trong Python, tên đặc biệt __main__ được sử dụng cho hai cấu trúc quan trọng: tên của môi trường cấp cao nhất của chương trình, có thể được kiểm tra bằng cách sử dụng biểu thức __name__ == '__main__'; và. Tệp __main__.py trong các gói Python.

Làm thế nào để bạn thoát khỏi một vòng lặp trong Python?

Python cung cấp hai từ khóa chấm dứt một lần lặp vòng lặp sớm: Tuyên bố Break Python ngay lập tức chấm dứt hoàn toàn một vòng lặp. Thực hiện chương trình tiến hành tuyên bố đầu tiên sau cơ thể vòng lặp. Tuyên bố Python tiếp tục ngay lập tức chấm dứt lặp lại vòng lặp hiện tại.

Có từ khóa nào trong Python không?

Từ khóa Break được sử dụng để phá vỡ một vòng lặp hoặc vòng lặp trong thời gian.

Break là gì tiếp tục vượt qua trong Python?

Một tuyên bố phá vỡ, khi được sử dụng bên trong vòng lặp, sẽ chấm dứt vòng lặp và thoát. Nếu được sử dụng bên trong các vòng lặp lồng nhau, nó sẽ thoát ra từ vòng lặp hiện tại. Một câu lệnh tiếp tục, khi được sử dụng bên trong một vòng lặp, sẽ dừng thực thi hiện tại và điều khiển sẽ quay trở lại bắt đầu vòng lặp.10-sept-2022

Bài Viết Liên Quan

Chủ Đề