.readlines() не должен возвращать массив?

У меня проблема с .readlines(), раньше он возвращал только указанную строку, т.е.

f1 = open('C:\file.txt','r')
filedata = f1.readlines(2)
f1.close()
print filedata

он должен напечатать вторую строку файла file.txt. Однако теперь, когда я запускаю тот же код, он возвращает все содержимое файла в массиве, с каждой строкой в ​​файле как отдельный объект в массиве. Я использую тот же компьютер и использую ту же версию python (2.7).

Кто-нибудь знает способ исправить это?

2 ответа

Не использовать readlines; он читает весь файл в память, затем выбирает нужную строку. Вместо этого просто прочитайте первый n линии, а затем перерыв.

n = 2
with open('C:\file.txt','r') as f1:
    for i, filedata in enumerate(f1, 1):
        if i == n:
            break
print filedata.strip()

itertools Документация также предоставляет рецепт для потребления первых n элементов последовательности:

def consume(iterator, n):
    "Advance the iterator n-steps ahead. If n is none, consume entirely."
    # Use functions that consume iterators at C speed.
    if n is None:
        # feed the entire iterator into a zero-length deque
        collections.deque(iterator, maxlen=0)
    else:
        # advance to the empty slice starting at position n
        next(islice(iterator, n, n), None)

Вы можете использовать это так:

n = 2
with open('C:\file.txt','r') as f1:
    consume(f1, n-1)
    filedata = next(f1)
print filedata.strip()

Изменить это:

f1.readlines(2)

К этому:

f1.readlines()[2]
Другие вопросы по тегам