File17. Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла (серией называется набор последовательно расположенных одинаковых элементов, а длиной серии — количество этих элементов). Например, для исходного файла с элементами 1, 5, 5, 5, 4, 4, 5 содержимое результирующего файла должно быть следующим: 1, 3, 2, 1.

Решение на Python 3:

import random
import numpy

def GenerateLine(fname):
N = random.randrange(1,20)
line = ""
L = []
for i in range(N):
x = str(random.randint(1,3))
L.append(x)
line = ", ".join(L)
try:
f = open(fname, "w")
try:
f.write(line)
finally:
f.close()
except IOError:
print('Write error: ',fname)
print(line)

f_source = "file17_source.txt"
GenerateLine(f_source)

try:
with open(f_source,'r') as f:
lines = f.readlines()
lst = []
lst_result = []
print(lines)
for line in reversed(lines):
for i in line.split(", "):
lst.append(int(i))
print(lst)
k = 1
ser_num = 1
i_prev = lst[0]
for i in lst[1::]:
if i == i_prev:
k += 1
else:
lst_result.append(i)
k = 1
ser_num += 1
i_prev = i
print("Number of series:",ser_num)
print("Length of series:",lst_result)

except IOError:
print('Open error: ',f_source)

Вариант 2:

import random
import numpy

def GenerateLine(fname):
N = random.randrange(1,20)
#N = 1
line = ""
L = []
for i in range(N):
x = str(random.randint(1,2))
L.append(x)
line = ", ".join(L)
#line = "1, 5, 5, 5, 4, 4, 5"
try:
f = open(fname, "w")
try:
f.write(line)
finally:
f.close()
except IOError:
print('Write error: ',fname)
print(line)

f_source = "file17_source.txt"
GenerateLine(f_source)

try:
with open(f_source,'r') as f:
lines = f.readlines()
lst = []
lst_result = []
print(lines)
for line in reversed(lines):
for i in line.split(", "):
lst.append(int(i))
print(lst)
k = 1
ser_num = 0
lst_result.append(k)
for i, j in zip(lst, lst[1:]):
#print(i,j)
if i == j:
lst_result[ser_num] += 1
else:
lst_result.append(1)
ser_num += 1
print("Number of series:",ser_num+1)
print("Length of series:",lst_result)

except IOError:
print('Open error: ',f_source)