К книге
Приложение к «Python в библиотеке»Arch. Other. fb2err_file.py
94%
Arch. Other. fb2err_file.py
32

#!/usr/bin/env python

# -*- codning: utf-8 -*-

import sys, os

# проверка структуры файла fb2

#----------------------------------------------

file = 'mesto_pod_solncem.fb2'

count = 0 # счетчик строк

flag = False # признак анализа тега

S = '' # место для обработанного тега

Tag = '' # место для тега

L = [] # стек

'''

with open(file, encoding="utf8") as f:

, ,LList = f.readlines()

for i in LList:

, ,count += 1

, ,if i.find('section') > -1:

, , , ,print(count)

, , , ,print(i)

f.close()

'''

count = 0 # счетчик строк

f = open(file, 'rb') # комментарий ниже

d = f.read()

for n in d:

, ,if n == 10: # символ завершения строки

, , , ,count += 1 # + в счетчик строк

, ,elif chr(n) == '<': # начало тега

, , , ,flag = True

, , , ,Tag = '' # подготовка места для тега

, ,else:

, , , ,if flag: # читаем тег

, , , , , ,if chr(n) == '>': # провека на конец тега, если да:

, , , , , , , ,S = Tag.split(' ')[0] # отбрасывание возможных параметров

, , , , , , , ,flag = False

, , , , , , , ,if S[0] == '/': # проверка на закрывающий тег

, , , , , , , , , ,S = S[1:] # удаление слеша

, , , , , , , , , ,Lo = L.pop() # чтение из стека

, , , , , , , , , ,if Lo[0] != S: # сообщение об ошибке

, , , , , , , , , , , ,print('Teg = "'+Lo[0]+'" begin in str = '+ str(Lo[1]+1))

, , , , , , , , , , , ,print('Не соответствует')

, , , , , , , , , , , ,print('Teg ="' +S+ '"end in str = '+ str(count +1))

, , , , , , , , , , , ,f.close()

, , , , , , , , , , , ,sys.exit()

, , , , , , , ,else:

, , , , , , , , if Tag[-1] != '/': # обработка одинарных тегов

, , , , , , , , , , Lo = [S, count] # подготовка для записи в стек

, , , , , , , , , , L.append(Lo) # запись в стек

, , , , , ,else:

, , , , , , , ,Tag = Tag + chr(n) # добавление символа к тегу

f.close()

print('OK!!!') # сообщение об удачной проверке.

Предыдущая главаГлава 32 из 34Следующая глава