Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # written for python 3
- import os
- def check_balance(characters):
- '''Return -1 if all delimiters are balanced or return
- the char number of the first mismatched delimiter.
- '''
- openers = {'(': ')', '{': '}', '[': ']', '“': '”', '‹': '›', '«': '»',
- '【': '】', '〈': '〉', '《': '》', '「': '」', '『': '』'}
- closers = set(openers.values())
- stack = []
- for i, c in enumerate(characters, start=1):
- if c in openers:
- stack.append(openers[c])
- elif c in closers:
- if not stack or c != stack.pop():
- return i
- return -1
- def scan(directory, encoding='utf-8'):
- for dirpath, dirnames, filenames in os.walk(directory):
- for filename in filenames:
- fullname = os.path.join(dirpath, filename)
- with open(fullname, 'r', encoding=encoding) as f:
- try:
- characters = f.read()
- except UnicodeDecodeError:
- continue
- position = check_balance(characters)
- if position >= 0:
- print('{0!r}: {1}'.format(position, fullname))
- scan('.')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement