Распечатать символы обратно до начала строки - PullRequest
0 голосов
/ 08 июня 2018

Рассмотрим файл foo.txt:

some simple text
and another line in the file

Прочитать файл с помощью

with open('foo.txt', 'r') as myfile:
        data = myfile.read()

Я хотел бы распечатать все символы с позиции i до началастрока, которая содержит символ в позиции i.

Например, если i - это позиция h из другого во 2-й строке, как обнаружить jтак что print data[j,i] возвращает and anoth?

Я пытался найти обратно, пока char не \n, но я думаю, что он не мог бы работать, если файл имеет одну строку.

Итак, есть ли символ, обозначающий начало строки?Я пытался ^, но это не работает.

MWE

# -*- coding: utf-8 -*-

with open('foo.txt', 'r') as myfile:
        data = myfile.read()

for i,c in enumerate(data):
    print i,c

# i = 16 is the 1st \n
# so procedure below does not work if 
# the file contains a single line

i = 25        # position of h.    problem with i = 13 for example.
print data[i] # confirming that

j = i
while data[j] != "\n":
    j -= 1

print data[j:i+1]

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Вы должны использовать rfind, чтобы найти последнюю новую строку.

data = myfile.read()

i = 25  # position of the h

j = data[:i].rfind("\n")

j теперь позиция последней новой строки перед data[i].Увеличьте это значение один раз (чтобы вы уронили символ новой строки), и вы сможете правильно нарезать ломтиками.

result = data[j+1:i+1]

Это дает дополнительное преимущество, так как все еще работает, если нет новой строки, поскольку rfind возвращает -1, если найдетнет ничего.

0 голосов
/ 08 июня 2018

Почему бы просто не прочитать это построчно?

i = 8

with open('foo.txt', 'r') as myfile:
    for line in myfile:
        print line[:i+1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...