.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()