Python 3 - Поиск строки в большом текстовом файле по номеру строки

Название в значительной степени говорит само за себя: я потратил целый день на то, чтобы выяснить, как извлечь одну строку текста из большого текстового файла путем ввода номера строки без успеха. Пока что кажется, что единственные решения, о которых говорят пользователи, - загрузить весь текстовый файл в список, но он слишком велик для этого. Структура файла.txt, с которым я работаю, буквально представляет собой большой список URL-адресов, по одному на строку.

Я пытался использовать handle.readline(), но это не помогло точно определить конкретную строку. Поскольку файл очень большой, я не могу оправдать загрузку всех его строк в память, используя handle.readlines() метод, так что это также перебор Я пытался написать функцию, используя for index,line in enumerate(handle) как найти в Интернете, но это странно возвращается None, Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Некоторый код ниже, который не работает:

fh = open("file.txt","a+")

def offsetfunc(handle,lineNum):
    line_offset = []
    offset = 0
    for line in handle:
        line_offset.append(offset)
        offset += len(line)
    handle.seek(line_offset[lineNum-1],0)

offsetfunc(fh,1)        #Returns IndexError
print(fh.readline())    #Presumably would be viable, if the previous statement worked?

Кроме того, используя linecache Техника загружает файл в память, так что да, это тоже нежизнеспособно.

1 ответ

Эта программа может делать то, что вы хотите:

def fetch_one_line(filename, linenumber):
    with open(filename) as handle:
        for n, line in enumerate(handle, 1):
            if n == linenumber:
                return line
    print("OOPS! There aren't enough lines in the file")
    return None

my_line = fetch_one_line('input.txt', 5)
print(repr(my_line))
Другие вопросы по тегам