MuzzDead
@MuzzDead
Учу Python, вижу в этом смысл;)

Как из текстового файла достать строки в определённом диапазоне?

В файле под именем name.txt находятся имена:
bob1
bob2
bob3 и тд.(каждое имя в новой строке)
Как из файла name.txt достать, например, с 2 по 6 строку?

name = open('name.txt', 'r')
for line in name:
    print(line)
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
DedIsDead
@DedIsDead
file = open('C:\\Users\\User\\name.txt', 'r')
testlist = file.readlines()
print(testlist[1:6])
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
dimonchik2013
@dimonchik2013
non progredi est regredi
во-первых, привыкай к with

with open('name.txt', 'r') as name:
for line in name:
print(line)

во-вторых - ты, зная или не зная, указал оптимальный метод, ибо f.read() f.readlines() суют весь файл в память, что может быть плохо на больших

осталось добавить enumerate или дилетанский count

for n, line in enumerate(name):
if n < 2:
continue
print(line)

условие > 6 добавляй сам
Ответ написан
Комментировать
@PavelMos
Можно cэкономить и
1) читать только до правой границы диапазона, например, до строки с индексом 6 (считая от нуля)
2) записывать только строки, входящие в диапазон (например, от 3 до 6, начиная с 0)
with open (fname, 'r', encoding='utf') as f:
    res=[]
    c=0
    for i in range (0,7) : #до правой границы, не включая 7
        r=f.readline()
        if c in range (3,7): # от левой границы, включая 3, до правой, не включая 7
            res+=[r]
        c+=1
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Пропустить нужное число строк, прочитать нужное число строк.
def read_lines_in_range(f, ifrom: int, ito: int) -> list[str]:
    f.seek(0)
    for i in range(ifrom):
        f.readline()
    return [f.readline() for i in range(ito-ifrom)]

Единственное, позиция чтения в файле должна быть в начале файла. Так что файл надо либо закрыть и открыть, либо сделать f.seek(0).
Ответ написан
Комментировать
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
  • Получаете список строк.
  • Используете на нем срез.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы