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.


 * 1) !python
 * 2) DetectOS.py a test framwork to deteCt and replace patternms in a file
 * 3) using the cat filemame |python DetectOS >filename.out
 * 4) the source file:filename is a copy of the WP edit box (Ctrl-A, Ctrl C, open file on gedit Ctrl-V)
 * 5) 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 mill_name = "Aqueduct Mill" mill_lat = "53.4066" mill_long = "-2.0675"
 * 1) Declaring variables used in testing

pattern = "[A-Z]{2}[ ]?\d\d\d[ ]?\d\d\d" done_pattern = "coord" name_pattern = "{{TMtr[|]([A-Za-z' ]+)"
 * 1) Defining regex patterns

regexp = re.compile(pattern) done_regexp = re.compile(done_pattern) name_regexp = re.compile(name_pattern)
 * 1) Compiling regex patterns

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

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, #sys.stdout.write(line) //job done by print which calls it
 * 1) main loop
 * 1) line matched