2017-02-03 2 views
0

Я читаю внешний txt-файл и отображаю все строки, у которых поле 6 равно Y. Затем мне нужно подсчитать эти строки. Однако, когда я добавляю функцию sum, она будет печатать только одну строку, если я удалю эту функцию суммы, все строки будут отображаться как ожидалось. Я предполагаю, что это что-то связано с циклом for, но не может показаться, как получить все строки для отображения и сохранить мою сумму. Может ли кто-нибудь помочь мне определить, где это происходит?Loop не отображает все строки при добавлении функции суммы

noLines = 0 

fileOpen = open ("file.txt","r") 
print ("Name: " + "\tDate: " + "\tAge: " + "\tColour: " + "\tPet") 

for line in fileOpen: 
    line = line[:-1] 
    field = line.split(',') 

    if field[6] == "Y": 
     print() 
     print (field[0] +"\t\t" + field[1] + "\t" + field[2] + "\t\t" + field[3] + "\t\t" + field[4]) 

     noLines = sum(1 for line in fileOpen) 

print() 
print(noLines) 
+0

Вы уверены, что там нет пробелов до или после «Y»? Я предлагаю удалить их на всякий случай: 'if field [6] .strip() ==" Y ": ...' Вы также сбросите количество строк в каждой итерации цикла. Это, вероятно, не то, что вы хотите. – DyZ

+0

@Sarah: Вы не должны изменять вопрос, как он делает существующие ответы недействительными. Пожалуйста, не изменяйте код, так как эти вопросы также служат ссылкой для будущих пользователей (а не только для вас). Пожалуйста, прокомментируйте мой ответ на этот вопрос, и я постараюсь помочь вам решить проблему (насколько мне известно) –

+0

Вы должны отредактировать код, чтобы сделать ваш вопрос чистым и понятным. Но изменение контекста вопроса заключается в использовании функции редактирования SO –

ответ

1

Вы используете sum неправильно. Для того, чтобы достичь желаемого результата, вы можете заменить текущий код с sum как:

noLines = sum(1 for l in open("file.txt","r") if l[:-1].split(',')[6]=='Y') 

Проблема с текущим кодом: Поскольку fileOpen является генератором. Вы исчерпываете его полностью в пределах sum, и поэтому ваша следующая for итерация не происходит. Вместо того чтобы использовать сумму, вы можете инициализировать noLines перед циклом for как:

noLines = 0 

for line in fileOpen: 
    # your stuff ... 

И вместо sum, сделайте следующее:

noLines += 1 
# instead of: noLines = sum(1 for line in fileOpen) 
+0

Привет, я сделал это. Смотрите мой отредактированный код в моем исходном сообщении. Ничто теперь не печатает, хотя для подсчета строк? –

+0

@SarahProctoer Вы снова открыли файл, используя 'fileOpen = open (" file.txt "," r ")'? –

+0

@SarahProctoer Кроме того, вы должны определить 'noLines = 0' перед циклом' for'. Проверьте ответ (отредактирован, чтобы сделать его понятным) –

Смежные вопросы