Для петли проблемы в Python - PullRequest
0 голосов
/ 23 июля 2011

Я очень новичок в программировании.Я хочу иметь возможность запускать эту программу для обеих записей в моем списке, но не достаточно разбираюсь в программировании, чтобы понять это правильно.Члены этого сайта помогли мне продвинуться далеко вперед, и программа отлично работает с одним набором тегов.Я хочу, чтобы он работал, чтобы я мог искать нескольких авторов за один проход.Вывод таков, что он собирает только всю информацию для «Shakes».а затем останавливается.Я просто не знаю, как отформатировать циклы, чтобы сделать это правильно.

Вот код, с которым я работаю:

authorList = ['Shakes.','Scott']

with open('/Users/Adam/Desktop/Poetrylist.txt','w') as output_file:
with open('/Users/Adam/Desktop/2e.txt','r') as open_file:
        the_whole_file = open_file.read()
        start_position = 0
        for x in authorList:
            while True:
               start_position = the_whole_file.find('<A>'+x+'</A>', start_position)
               if start_position < 0:
                   break
               end_position = the_whole_file.find('</W>', start_position)
               output_file.write(the_whole_file[start_position:end_position+4])
               output_file.write("\n")    
               start_position = end_position + 4

Я уверен, что это очень простая проблема, ноЯ пытаюсь научить себя питону, и он идет довольно медленно.

Ответы [ 3 ]

5 голосов
/ 23 июля 2011

Я думаю, это потому, что вы не сбрасываете start_position;переменные в Python ограничены своей функцией, классом или модулем, но не их циклом.Поэтому попробуйте добавить эту строку:

for x in authorList:
    start_position = 0   # Add this
    while True:
2 голосов
/ 23 июля 2011

Это будет проблемой

    start_position = 0
    for x in authorList:
        while True:

Для первого автора start_position равно 0. Круто.

Для второго автора, что будет start_position? Подсказка. Ничто не сбрасывает его в ноль.

1 голос
/ 23 июля 2011

Обрабатывает входной файл за один проход:

#!/usr/bin/env python

authorList = ['Shakes.','Scott']
with open('/Users/Adam/Desktop/2e.txt','r') as open_file:
    the_whole_file = open_file.read()
    start_position = 0
    for x in authorList:
        while True:
           start_position = the_whole_file.find('<A>')
           if start_position < 0:
               break
           author_end = the_whole_file.find('</A>', start_position)
           end_position = the_whole_file.find('</W>', start_position)
           if the_whole_file[start+position + 3:author_end] in authorList:
               output_file.write(the_whole_file[start_position:end_position+4])
               output_file.write("\n")    
           start_position = end_position + 4

Инвертирует цикл, сканируя теги авторов, проверяя, есть ли их значение в вашем списке авторов, и печатая до закрывающего тега, если это так.,Это может быть или не быть менее эффективным, чем зацикливание на каждом из авторов, поскольку оно должно посещать каждый тег.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...