User:ClemRutter/Toolbox/python
DetectOS
A custom written filter to take gridrefs from the List of mills in .... pages, check that they haven't been processed and then to insert the Sat Nav code after them.
- !python
- DetectOS.py a test framwork to deteCt and replace patternms in a file
- using the cat filemame |python DetectOS >filename.out
- the source file:filename is a copy of the WP edit box (Ctrl-A, Ctrl C, open file on gedit Ctrl-V)
- fileout.out is gedited- Ctrl-A, Ctrl C into the WP edit box
import sys
import re
import geo_helper #See http://gagravarr.org/code/ for updates and information
import osgb #This must be in the directory path: imported from www.agapow.net/programming/python/osgb.py a later version is available from http://pypi.python.org/pypi/osgb
- Declaring variables used in testing
mill_name = "Aqueduct Mill"
mill_lat = "53.4066"
mill_long = "-2.0675"
- Defining regex patterns
pattern = "[A-Z]{2}[ ]?\d\d\d[ ]?\d\d\d"
done_pattern = "coord"
name_pattern = "{{TMtr[|]([A-Za-z' ]+)"
- Compiling regex patterns
regexp = re.compile(pattern)
done_regexp = re.compile(done_pattern)
name_regexp = re.compile(name_pattern)
def convert_function(match):
OSgrid = match.group(0)
os36_height = 0
os36_long, os36_lat=osgb.osgb_to_lonlat(OSgrid) #from osgb.py
wgs_list=geo_helper.turn_osie36_into_wgs84( os36_lat, os36_long, os36_height)
wgs_lat=wgs_list[0]
wgs_long=wgs_list[1]
GEOtag = "{{Coord|" +str("%.04f" % wgs_lat)+ "|" + str("%.04f" % wgs_long) + "|display=inline|type:landmark_region:GB|format=dms|name="+ mill_name + "}}"
return OSgrid + " "+ GEOtag
- main loop
for line in sys.stdin:
result = regexp.search(line) and not done_regexp.search(line)
if result:
mill_name_result = name_regexp.search(line)
mill_name = mill_name_result.group(1)
# print mill_name debugging command
line = regexp.sub(convert_function, line)
print line
else:
print line,
- line matched
#sys.stdout.write(line) //job done by print which calls it