#python #file #iteration #processing-efficiency
#python #файл #итерация #эффективность обработки
Вопрос:
У меня есть файл с большим количеством чисел:
0.98
0.23
0.10
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
10.3
11.9
0.56
...
Я хочу напечатать номер строки, в которой число 0 повторяется 10 раз подряд (как минимум). Учитывая вышеуказанный ввод, на выходе будет: 4 (для строки с номером 4 и потому, что 0 повторяется 10 раз подряд). Файлы list.txt это огромный файл. Я новичок в Python. Как я могу удалить ошибку в следующем скрипте:
import ast
values = open("list.txt","r")
values = list(map(int, ast.literal_eval(values.read().strip())))
count=0
length=""
if len(values)>1:
for i in range(1,len(values)):
if values[i-1]==values[i]:
count =1
else :
length = values[i-1] " repeats " str(count) ", "
count=1
length = ("and " values[i] " repeats " str(count))
else:
i=0
length = ("and " values[i] " repeats " str(count))
print (length)
Комментарии:
1. «Файлы list.txt это огромный файл» — тогда сделайте это построчно. Также вас интересует первое вхождение (строка под номером 4 в данном случае) или все вхождения шаблона?
2. Я хочу прочитать файл построчно и остановиться, когда он обнаружит, что число 0 повторяется 10 раз подряд, и это все, независимо от всех совпадений шаблона.
Ответ №1:
Прочитайте и оцените файл построчно. Если шаблон найден, цикл прерывается, прекращая чтение файла
import ast
count = 0
lineNb = -1
found = False # False by default
with open("list.txt") as f:
for i,line in enumerate(f): # loop over lines, one-by-one
value = ast.literal_eval(line)
if value == 0:
if count == 0: # first occurrence
lineNb = i # set potential lineNb
count = 1 # increment counter
if count == 10: # desired condition
found = True # now we know we have found the pattern
break # break the for loop
else: # not 0
count = 0 # reset counter
print(found,lineNb) # (True,3) # lineNb is zero-based, 3 = 4th line
Ответ №2:
with open('consecutive.txt') as f:
c = 0
for i,line in enumerate(f):
if float(line)==0.0:
c =1
if c == 10:
print(i-8)
break
else:
c=0
Вывод
4