Положение указателя не начинается с 0 - PullRequest
0 голосов
/ 05 мая 2019

Я хочу спросить о методе tell (). Итак, имейте такой код

op = open('data.txt', 'r')
pos = op.tell()
data = op.readline()
key = []
while data:
   pos = op.tell()
   data = op.readline()
   key.append(pos)

и результат

key[:3]
[[87], [152], [240]]

Я хочу, чтобы значение моего ключа начиналось с 0, так как это первая позиция указателя на начало предложения. но он начинается со значения начального указателя для второго предложения. извините, я новичок в Python.

данные выглядят так. он содержит несколько строк

  Sanjeev Saxena#Parallel Integer Sorting and Simulation Amongst CRCW Models.
  Hans Ulrich Simon#Pattern Matching in Trees and Nets.
  Nathan Goodman#Oded Shmueli#NP-complete Problems Simplified on Tree Schemas.

Ответы [ 2 ]

1 голос
/ 05 мая 2019

В комментариях я осознал нашу ошибку ... Условие while data требует, чтобы вы прочитали кусок текста, я думаю, что правильным способом будет использование цикла while True и разрыв по завершении.

# list to store results.
keys = []
# I used a with context manager to ensure file.close()
with open('data.txt') as f: 
    while True: 
        # read the current pointer and store it into the keys list
        pos = f.tell()
        keys.append(pos)
        # now I check if there is some data left, if not then break
        data = f.readline() 
        if not data: 
            break 

, таким образом, сохраняется и конечный (конечный) pos, если вы хотите только начало строки, используйте это

# list to store results.
keys = []
# I used a with context manager to ensure file.close()
with open('data.txt') as f: 
    while True: 
        # read the current pointer and store it into the keys list
        pos = f.tell()
        # now I check if there is some data left, if not then break
        data = f.readline() 
        if not data: 
            break
        # if we didn't break then we store the pos
        keys.append(pos)
1 голос
/ 05 мая 2019

Вы не добавили первый указатель в список key (у вас есть 2x pos = op.tell(), прежде чем вы сделаете первый key.append(pos)).

Вы должны просто удалить 2-ю и 3-ю строки:

op = open('data.txt', 'r')
key = []
while data:
    pos = op.tell()
    data = op.readline()
    key.append(pos)
...