Hướng dẫn python file go back one line - tệp python quay lại một dòng

41

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang duyệt qua một con trỏ tệp Python của một tệp văn bản ở chế độ chỉ đọc bằng File.Readline [] Tìm kiếm một dòng đặc biệt. Khi tôi tìm thấy dòng đó, tôi muốn chuyển con trỏ tệp đến một phương thức mong đợi con trỏ tệp sẽ ở đầu dòng đọc đó [không phải ngay sau khi nó.]

Làm thế nào để tôi thực chất hoàn tác một tệp.readline [] trên một con trỏ tệp?

CodeForester

359K16 Huy hiệu vàng102 Huy hiệu bạc126 Huy hiệu đồng16 gold badges102 silver badges126 bronze badges

Hỏi ngày 17 tháng 8 năm 2010 lúc 18:02Aug 17, 2010 at 18:02

Bạn phải nhớ vị trí bằng cách gọi file.tell[] trước khi đọc và sau đó gọi file.seek[] để tua lại. Cái gì đó như:

fp = open['myfile']
last_pos = fp.tell[]
line = fp.readline[]
while line != '':
  if line == 'SPECIAL':
    fp.seek[last_pos]
    other_function[fp]
    break
  last_pos = fp.tell[]
  line = fp.readline[]

Tôi không thể nhớ lại nếu an toàn khi gọi file.seek[] bên trong vòng lặp for line in file vì vậy tôi thường chỉ viết vòng lặp while. Có lẽ có một cách làm điều này nhiều hơn.

Đã trả lời ngày 17 tháng 8 năm 2010 lúc 18:08Aug 17, 2010 at 18:08

D.ShawleyD.ShawleyD.Shawley

57.1K10 Huy hiệu vàng96 Huy hiệu bạc112 Huy hiệu đồng10 gold badges96 silver badges112 bronze badges

1

Bạn ghi lại điểm bắt đầu của dòng với

>>> with open['bah.txt', 'w'] as f:
...   f.writelines['Hello %s\n' % i for i in range[5]]
... 
>>> with open['bah.txt'] as f:
...   f.readline[]
...   x = f.tell[]
...   f.readline[]
...   f.seek[x]
...   f.readline[]
... 
'Hello 0\n'
'Hello 1\n'
'Hello 1\n'
>>> 
0 trước khi bạn gọi
>>> with open['bah.txt', 'w'] as f:
...   f.writelines['Hello %s\n' % i for i in range[5]]
... 
>>> with open['bah.txt'] as f:
...   f.readline[]
...   x = f.tell[]
...   f.readline[]
...   f.seek[x]
...   f.readline[]
... 
'Hello 0\n'
'Hello 1\n'
'Hello 1\n'
>>> 
1 và quay lại điểm đó, nếu bạn cần, với
>>> with open['bah.txt', 'w'] as f:
...   f.writelines['Hello %s\n' % i for i in range[5]]
... 
>>> with open['bah.txt'] as f:
...   f.readline[]
...   x = f.tell[]
...   f.readline[]
...   f.seek[x]
...   f.readline[]
... 
'Hello 0\n'
'Hello 1\n'
'Hello 1\n'
>>> 
2.

>>> with open['bah.txt', 'w'] as f:
...   f.writelines['Hello %s\n' % i for i in range[5]]
... 
>>> with open['bah.txt'] as f:
...   f.readline[]
...   x = f.tell[]
...   f.readline[]
...   f.seek[x]
...   f.readline[]
... 
'Hello 0\n'
'Hello 1\n'
'Hello 1\n'
>>> 

Như bạn thấy, tìm kiếm/nói "cặp" là "hoàn tác", có thể nói, chuyển động con trỏ tệp được thực hiện bởi

>>> with open['bah.txt', 'w'] as f:
...   f.writelines['Hello %s\n' % i for i in range[5]]
... 
>>> with open['bah.txt'] as f:
...   f.readline[]
...   x = f.tell[]
...   f.readline[]
...   f.seek[x]
...   f.readline[]
... 
'Hello 0\n'
'Hello 1\n'
'Hello 1\n'
>>> 
1. Tất nhiên, điều này chỉ có thể hoạt động trên một tệp tìm kiếm thực tế [tức là, đĩa], không [ví dụ] trên các đối tượng giống như tệp được xây dựng với phương thức makefile của ổ cắm, v.v.

Đã trả lời ngày 17 tháng 8 năm 2010 lúc 18:09Aug 17, 2010 at 18:09

Alex Martellialex MartelliAlex Martelli

826K163 Huy hiệu vàng1203 Huy hiệu bạc1382 Huy hiệu Đồng163 gold badges1203 silver badges1382 bronze badges

Nếu phương thức của bạn chỉ đơn giản muốn lặp lại thông qua tệp, thì bạn có thể sử dụng

>>> with open['bah.txt', 'w'] as f:
...   f.writelines['Hello %s\n' % i for i in range[5]]
... 
>>> with open['bah.txt'] as f:
...   f.readline[]
...   x = f.tell[]
...   f.readline[]
...   f.seek[x]
...   f.readline[]
... 
'Hello 0\n'
'Hello 1\n'
'Hello 1\n'
>>> 
4 để tạo một trình lặp phù hợp:

import itertools

# do something to the marker line and everything after
def process[it]:
    for line in it:
        print line,
        
with open[filename,'r'] as f:
    for line in f:
        if 'marker' in line:
            it=itertools.chain[[line,],f]
            process[it]
            break

idbrii

10,4K5 Huy hiệu vàng59 Huy hiệu bạc100 Huy hiệu đồng5 gold badges59 silver badges100 bronze badges

Đã trả lời ngày 17 tháng 8 năm 2010 lúc 18:10Aug 17, 2010 at 18:10

UnutbuUnutbuunutbu

800K172 Huy hiệu vàng1724 Huy hiệu bạc1625 Huy hiệu Đồng172 gold badges1724 silver badges1625 bronze badges

0

fin = open['myfile']
for l in fin:
    if l == 'myspecialline':
        # Move the pointer back to the beginning of this line
        fin.seek[fin.tell[] - len[l]]
        break
# now fin points to the start of your special line

Đã trả lời ngày 17 tháng 8 năm 2010 lúc 18:11Aug 17, 2010 at 18:11

GWWGWWGWW

42.1k11 Huy hiệu vàng110 Huy hiệu bạc107 Huy hiệu đồng11 gold badges110 silver badges107 bronze badges

3

Nếu bạn không biết dòng cuối cùng vì bạn không truy cập nó, bạn có thể đọc ngược cho đến khi bạn thấy một ký tự mới:

with open[logfile, 'r'] as f:
    # go to EOF
    f.seek[0, os.SEEK_END]
    nlines = f.tell[]
    i=0
    while True:
        f.seek[nlines-i]
        char = f.read[1]
        if char=='\n':
            break
        i+=1

Đã trả lời ngày 28 tháng 8 năm 2018 lúc 13:39Aug 28, 2018 at 13:39

JltjltJLT

6828 Huy hiệu bạc15 Huy hiệu Đồng8 silver badges15 bronze badges

Làm thế nào để bạn nhảy đến một dòng cụ thể trong Python?

Khi bạn sử dụng câu lệnh GOTO trong Python, về cơ bản, bạn đang hướng dẫn trình thông dịch trực tiếp thực hiện một dòng mã khác thay vì mã hiện tại. Dòng mã đích mà bạn muốn trình thông dịch thực thi tại thời điểm này cần được đánh dấu trong phần được gọi là nhãn hiệu.goto statement in Python, you are basically instructing the interpreter to directly execute another line of code instead of the current one. The target line of code which you want the interpreter to execute at this moment needs to be marked in the section termed “label”.

Làm thế nào để tôi quay lại bắt đầu một tập tin trong Python?

Chúng ta có thể di chuyển con trỏ tệp sang đầu tệp bằng phương thức Seek [] bằng cách chuyển cài đặt từ đó sang 0. 0 chỉ ra byte đầu tiên, là đầu của tệp.using the seek[] method by passing the setting whence to 0. The 0 indicates the first byte, which is the beginning of the file.

Làm thế nào để bạn đọc một dòng trước đó trong một tệp văn bản trong Python?

Phương thức 1: FileObject.ReadLines [] Một đối tượng tệp có thể được tạo trong python và sau đó readlines [] phương thức có thể được gọi trên đối tượng này để đọc các dòng vào một luồng.fileobject.readlines[] A file object can be created in Python and then readlines[] method can be invoked on this object to read lines into a stream.

Làm cách nào để quay lại dòng cuối cùng của một tập tin trong Python?

Để tìm dòng cuối cùng của một tệp lớn trong Python bằng cách tìm kiếm: Mở tệp ở chế độ nhị phân. Xem cho đến cuối tệp. Giảm các ký tự để tìm sự khởi đầu của dòng cuối cùng.Open the file in binary mode. Seek to the end of the file. Jump back the characters to find the beginning of the last line.

Bài Viết Liên Quan

Chủ Đề