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

  1. Declaring variables used in testing

mill_name = "Aqueduct Mill"

mill_lat = "53.4066"

mill_long = "-2.0675"

  1. Defining regex patterns

pattern = "[A-Z]{2}[ ]?\d\d\d[ ]?\d\d\d"

done_pattern = "coord"

name_pattern = "{{TMtr[|]([A-Za-z' ]+)"

  1. 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

  1. 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,

  1. line matched

#sys.stdout.write(line) //job done by print which calls it