вложено для циклов в Python, включающих 2 файла

1

У меня есть 2 файла: один (range.txt) с строками, которые содержат 2 целых числа с разделителями-табуляциями и второй (values.txt) с значениями с разделителями табуляции, первый из которых является целым числом. Целые числа в range.txt представляют начальную и конечную точки для диапазона, и для каждого из этих диапазонов я хочу спросить, сколько из целых чисел в values.txt попадает в этот диапазон. В качестве отправной точки я написал этот бит кода:

RangesFile = open('ranges.txt', 'r')
ValuesFile = open('values.txt', 'r')
for Line in RangesFile:
    RangesFile.next()
    print Line
    Line = Line.strip('\n')
    RangeValues = Line.split('\t')
    Start = int(RangeValues[0])
    End = int(RangeValues[1])
    print Start
    print End
    for Line in ValuesFile:
        Line = Line.strip('\n')
        ElementList = Line.split('\t')
        SNP = int(ElementList[0])
        print SNP
        print 'yes' if Start <= SNP <= End else 'no'        

RangesFile.close()
ValuesFile.close()

Я получаю следующий вывод для тестовых файлов с 2 диапазонами и 2 целыми числами:

1867    4663

1867
4663
1923
yes
10384150
no
15274293    15275591

15274293
15275591
17486938    17490453

Вложенная петля, кажется, не запускается после первой итерации. Что я сделал не так? (Я знаю, что мой код слишком длинный, но я стараюсь, чтобы все было просто, как абсолютный новичок.) Спасибо за вашу помощь!

  • 2
    Исправьте отступ, этот фрагмент синтаксически недействителен.
  • 0
    Согласитесь с Cat Plus Plus - не можете сказать, является ли ваш отступ ошибкой форматирования здесь или частью источника ваших проблем ...
Показать ещё 1 комментарий
Теги:
for-loop

1 ответ

4
Лучший ответ

второй for цикла считывает весь ValuesFile. после его выполнения указатель файла находится в конце файла, и из него больше нет значений.

вы должны сбросить ValuesFile указатель на файл перед началом второй for цикла, чтобы начать чтение ValuesFile с начала снова.

  • 0
    Понял. Спасибо! Нужно ли открывать ValuesFile каждый раз, когда я прохожу цикл, или есть более эффективный способ сделать это?
  • 0
    Есть более эффективные способы, такие как вызов ValuesFile.seek(0) . см. ответы на этот вопрос для более подробной информации.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню