Ниже приведен простой поиск. Это работает, за исключением того факта, что iterator пропускает первую строку файла. Внутри iterator первый оператор print содержит правильное слово, но второй оператор print (после цикла for) содержит вторую строку текста, а не первую.

Как насчет этого for поведения циклов, которое я пропускаю?

"""Searches for the query inside a file
"""
def lines(the_file, query):
    lines = open(the_file)
    line(lines, query)

def line(lines, query):
    line = lines.readline()
    iterator(line, lines, word, query)

def word(line, query):
    word = line.strip()
    conditional(query, word)

def iterator(this, that, function, query):
    print this
    for this in that:
        print this
        function(this, query)

def conditional(this, that):
    if this in that:
        output(that, True)
    else:
        None

def output(query, result):
    print query

def search(the_file, query):
    lines(the_file, query)

search('c:/py/myfile.txt', 'a')
0
pythondjango 30 Янв 2013 в 03:41

2 ответа

Лучший ответ

Я думаю, ваша проблема здесь:

def line(lines, query):
    line = lines.readline()
    iterator(line, lines, word, query)

Эта строка: line = lines.readline() читает одну строку из файла перед началом вашей итерации. Затем в цикле for вы на самом деле перезаписываете переменную this, она больше не указывает на ваш исходный line.

1
Marius 29 Янв 2013 в 23:45

Переменная lines является файловым объектом, и когда вы сделали readline(), вы переместили указатель на вторую строку.

1
Bula 29 Янв 2013 в 23:44