2015-01-09 2 views
0

Я хотел бы продолжить итерацию через текстовый файл до тех пор, пока не будет выполнено текущее условие внутри цикла.python итерирует хотя текстовый файл до тех пор, пока не будет выполнено условие

вот образец текст:

10-01 N/A 
10-02 N/A 
10-03 N/A 
10-04 N/A 
10-05 N/A 
10-06 N/A 
10-07 N/A 
10-08 N/A 
10-09 N/A 
10-10 N/A 
10-11 N/A 
10-12 N/A 
===04===...... # Skip line until '01' is found 
===12===...... # Skip line until '01' is found 
05-01 N/A 
05-02 N/A 
05-03 N/A 
05-04 N/A 
05-05 N/A 
05-06 N/A 
===08===...... # Skip line until '07' is found 
===11===...... # Skip line until '07' is found 
05-07 N/A 
05-08 N/A 
05-09 N/A 
05-10 N/A 
05-11 N/A 
05-12 N/A 

это петля в то время как я пытаюсь:

x = 1 
with open(loc_path + 'SAMPLEDATA.TXT', 'rb') as textin: 
    for line in textin: 
     while x < 13: 
      if line[3:].startswith(str(x).zfill(2)): 
       print '%r' % line 
      else: 
       x = 1 # Restart loop 
      x += 1 

это еще один способ для достижения этой цели, помимо использования в то время цикла при использовании времени цикла не является правильным?

спасибо

+0

ли ваш текущий код работает правильно? Мне трудно понять, о чем вы просите. – cpburnz

+0

нет, он застрял бесконечно. Я попробовал еще несколько петель, но все они застряли. контуры while, которые заканчиваются, печатайте каждую строку в файле, включая строки с «#», которые я хочу исключить. – jes516

ответ

0

Вы хотите изменить свой while x < 13 в Условный оператор условно остановить для цикла. НАПРИМЕР,

x = 1 
with open(loc_path + 'SAMPLEDATA.TXT', 'rb') as textin: 
    for line in textin: 
     if line[3:].startswith(str(x).zfill(2)): 
      print '%r' % line 
     else: 
      x = 1 # Restart counter 
     x += 1 
     if x >= 13: 
      break # Stop reading 
+0

Странно, что это принятый ответ. Он только проходит через счетчик 1-12 один раз (и его пример показывает несколько разделов, где счетчик должен быть перезапущен). Кроме того, в чем смысл перезапуска счетчика, когда сразу же приближается следующая строка? – Gerrat

+1

@Gerrat OP, должно быть, получил свой код для работы из моего предложения (что неправильно, как вы указали), прежде чем вы отправили свой ответ. Он [предложил изменить] (http://stackoverflow.com/review/spected-edits/6700423) к моему ответу, чтобы включить его код, который был очень похож на ваш ответ. – cpburnz

3

Вы хотите: только увеличить счетчик, когда вы найдете строку, которую вы ищете, и сбросить его всякий раз, когда она попадает 13

x = 1 
with open(loc_path + 'SAMPLEDATA.TXT', 'rb') as textin: 
    for line in textin: 
     if line[3:].startswith(str(x).zfill(2)): 
      print '%r' % line 
      x += 1 
     if x >= 13: 
      x = 1 # reset counter 
+0

Я добавил редактирование на cpburnz ответ, который сделал точно так, как вы указали. но вы правы, он только зацикливается один раз. – jes516