cpython/Mac/scripts/findgremlins.py

58 lines
1.2 KiB
Python

"""findgremlins - Search through a folder and subfolders for
text files that have characters with bit 8 set, and print
the filename and a bit of context.
By Just, with a little glue by Jack"""
import EasyDialogs
import MacOS
import re
import os
import string
import sys
xpat = re.compile(r"[\200-\377]")
def walk(top, recurse=1):
if os.path.isdir(top):
if recurse:
for name in os.listdir(top):
path = os.path.join(top, name)
walk(path)
else:
cr, tp = MacOS.GetCreatorAndType(top)
if tp in ('TEXT', '\0\0\0\0') and top[-4:] <> ".hqx":
data = open(top).read()
badcount = 0
for ch in data[:256]:
if ord(ch) == 0 or ord(ch) >= 0200:
badcount = badcount + 1
if badcount > 16:
print `top`, 'appears to be a binary file'
return
pos = 0
gotone = 0
while 1:
m = xpat.search(data, pos)
if m is None:
break
if not gotone:
print `top`
gotone = 1
[(i, j)] = m.regs
print " ", string.replace(data[i-15:j+15], '\n', ' ')
pos = j
def main():
if sys.argv[1:]:
for pathname in sys.argv[1:]:
walk(pathname)
else:
pathname = EasyDialogs.AskFolder()
if pathname:
walk(pathname)
if __name__ == '__main__':
main()