Python 3.8.3. Функция "readline" читает не строку целиком, а некоторое количество символов с начала строки

Есть файл 'list.txt'. В нём несколько строк, вот таких:

abc
def
ghi
klm

Я хочу присвоить переменной значение, равное содержанию определённой строки. В коде ниже я хочу получить значение второй строки из файла 'list.txt'.

f = open('list.txt', 'r')
text = f.readline(2)
print(text)

Получаю следующее:

>>> text
'ab'

То есть, функция readline принимает в качестве аргумента не номер строки, а количество символов с начала первой строки. Я пробовал задавать число большее, чем символов в первой строке, но получал только полное значение первой строки. Почему так происходит?


Ответы (1 шт):

Автор решения: gil9red

Описание метода readline(size=-1):

Read and return one line from the stream. If size is specified, at most size bytes will be read.

...

А чтобы получить определенную строку файла, как вариант, считать все и получить конкретную из списка строк:

f = open('list.txt')
lines = f.readlines()
print(lines[1])

Этот вариант подходит, для случаев, когда файл влезает в память


Если файл слишком большой, то можно считывать ища определенную строку, например:

num = 0
need_num = 2

while True:
    num += 1
    line = f.readline()

    # Если конец файла
    if not line:
        break

    if num == need_num:
        print(line)
        break
→ Ссылка