14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""A collection of string operations (most are no longer used). 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmWarning: most of the code you see here isn't normally used nowadays. 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmBeginning with Python 1.6, many of these functions are implemented as 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmmethods on the standard string object. They used to be implemented by 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylma built-in module called strop, but strop is now obsolete itself. 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPublic module variables: 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmwhitespace -- a string containing all characters considered whitespace 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmlowercase -- a string containing all characters considered lowercase letters 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmuppercase -- a string containing all characters considered uppercase letters 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmletters -- a string containing all characters considered letters 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdigits -- a string containing all characters considered decimal digits 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmhexdigits -- a string containing all characters considered hexadecimal digits 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmoctdigits -- a string containing all characters considered octal digits 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmpunctuation -- a string containing all characters considered punctuation 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmprintable -- a string containing all characters considered printable 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm""" 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Some strings for ctype-style character classification 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmwhitespace = ' \t\n\r\v\f' 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmlowercase = 'abcdefghijklmnopqrstuvwxyz' 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmuppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmletters = lowercase + uppercase 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmascii_lowercase = lowercase 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmascii_uppercase = uppercase 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmascii_letters = ascii_lowercase + ascii_uppercase 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdigits = '0123456789' 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmhexdigits = digits + 'abcdef' + 'ABCDEF' 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmoctdigits = '01234567' 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmpunctuation = """!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~""" 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmprintable = digits + letters + punctuation + whitespace 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Case conversion helpers 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Use str to convert Unicode literal in case of -U 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylml = map(chr, xrange(256)) 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_idmap = str('').join(l) 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdel l 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Functions which aren't available as string methods. 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Capitalize the words in a string, e.g. " aBc dEf " -> "Abc Def". 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef capwords(s, sep=None): 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """capwords(s [,sep]) -> string 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Split the argument into words using split, capitalize each 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm word using capitalize, and join the capitalized words using 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm join. If the optional second argument sep is absent or None, 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runs of whitespace characters are replaced by a single space 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm and leading and trailing whitespace are removed, otherwise 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sep is used to split and join the words. 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return (sep or ' ').join(x.capitalize() for x in s.split(sep)) 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Construct a translation string 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_idmapL = None 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef maketrans(fromstr, tostr): 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """maketrans(frm, to) -> string 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a translation table (a string of 256 bytes long) 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suitable for use in string.translate. The strings frm and to 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm must be of the same length. 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if len(fromstr) != len(tostr): 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise ValueError, "maketrans arguments must have same length" 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm global _idmapL 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not _idmapL: 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm _idmapL = list(_idmap) 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm L = _idmapL[:] 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm fromstr = map(ord, fromstr) 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for i in range(len(fromstr)): 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm L[fromstr[i]] = tostr[i] 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return ''.join(L) 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#################################################################### 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport re as _re 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass _multimap: 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Helper class for combining multiple mappings. 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Used by .{safe_,}substitute() to combine the mapping and keyword 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm arguments. 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, primary, secondary): 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._primary = primary 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._secondary = secondary 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __getitem__(self, key): 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self._primary[key] 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except KeyError: 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self._secondary[key] 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass _TemplateMetaclass(type): 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pattern = r""" 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm %(delim)s(?: 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (?P<escaped>%(delim)s) | # Escape sequence of two delimiters 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (?P<named>%(id)s) | # delimiter and a Python identifier 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm {(?P<braced>%(id)s)} | # delimiter and a braced identifier 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (?P<invalid>) # Other ill-formed delimiter exprs 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ) 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(cls, name, bases, dct): 1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm super(_TemplateMetaclass, cls).__init__(name, bases, dct) 1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 'pattern' in dct: 1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pattern = cls.pattern 1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pattern = _TemplateMetaclass.pattern % { 1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'delim' : _re.escape(cls.delimiter), 1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'id' : cls.idpattern, 1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm } 1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cls.pattern = _re.compile(pattern, _re.IGNORECASE | _re.VERBOSE) 1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass Template: 1254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """A string class for supporting $-substitutions.""" 1264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm __metaclass__ = _TemplateMetaclass 1274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm delimiter = '$' 1294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm idpattern = r'[_a-z][_a-z0-9]*' 1304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, template): 1324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.template = template 1334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Search for $$, $identifier, ${identifier}, and any bare $'s 1354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _invalid(self, mo): 1374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm i = mo.start('invalid') 1384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm lines = self.template[:i].splitlines(True) 1394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not lines: 1404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm colno = 1 1414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm lineno = 1 1424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 1434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm colno = i - len(''.join(lines[:-1])) 1444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm lineno = len(lines) 1454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise ValueError('Invalid placeholder in string: line %d, col %d' % 1464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (lineno, colno)) 1474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def substitute(self, *args, **kws): 1494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if len(args) > 1: 1504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise TypeError('Too many positional arguments') 1514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not args: 1524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mapping = kws 1534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif kws: 1544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mapping = _multimap(kws, args[0]) 1554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 1564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mapping = args[0] 1574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Helper function for .sub() 1584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def convert(mo): 1594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Check the most common path first. 1604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm named = mo.group('named') or mo.group('braced') 1614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if named is not None: 1624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm val = mapping[named] 1634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # We use this idiom instead of str() because the latter will 1644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # fail if val is a Unicode containing non-ASCII characters. 1654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return '%s' % (val,) 1664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if mo.group('escaped') is not None: 1674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self.delimiter 1684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if mo.group('invalid') is not None: 1694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._invalid(mo) 1704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise ValueError('Unrecognized named group in pattern', 1714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.pattern) 1724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self.pattern.sub(convert, self.template) 1734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def safe_substitute(self, *args, **kws): 1754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if len(args) > 1: 1764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise TypeError('Too many positional arguments') 1774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not args: 1784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mapping = kws 1794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif kws: 1804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mapping = _multimap(kws, args[0]) 1814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 1824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mapping = args[0] 1834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Helper function for .sub() 1844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def convert(mo): 1854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm named = mo.group('named') 1864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if named is not None: 1874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # We use this idiom instead of str() because the latter 1894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # will fail if val is a Unicode containing non-ASCII 1904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return '%s' % (mapping[named],) 1914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except KeyError: 1924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self.delimiter + named 1934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm braced = mo.group('braced') 1944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if braced is not None: 1954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return '%s' % (mapping[braced],) 1974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except KeyError: 1984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self.delimiter + '{' + braced + '}' 1994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if mo.group('escaped') is not None: 2004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self.delimiter 2014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if mo.group('invalid') is not None: 2024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self.delimiter 2034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise ValueError('Unrecognized named group in pattern', 2044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.pattern) 2054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self.pattern.sub(convert, self.template) 2064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#################################################################### 2104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# NOTE: Everything below here is deprecated. Use string methods instead. 2114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# This stuff will go away in Python 3.0. 2124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Backward compatible names for exceptions 2144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmindex_error = ValueError 2154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmatoi_error = ValueError 2164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmatof_error = ValueError 2174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmatol_error = ValueError 2184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# convert UPPER CASE letters to lower case 2204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef lower(s): 2214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """lower(s) -> string 2224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s converted to lowercase. 2244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.lower() 2274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Convert lower case letters to UPPER CASE 2294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef upper(s): 2304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """upper(s) -> string 2314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s converted to uppercase. 2334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.upper() 2364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Swap lower case letters and UPPER CASE 2384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef swapcase(s): 2394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """swapcase(s) -> string 2404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s with upper case characters 2424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm converted to lowercase and vice versa. 2434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.swapcase() 2464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Strip leading and trailing tabs and spaces 2484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef strip(s, chars=None): 2494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """strip(s [,chars]) -> string 2504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s with leading and trailing 2524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm whitespace removed. 2534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If chars is given and not None, remove characters in chars instead. 2544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If chars is unicode, S will be converted to unicode before stripping. 2554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.strip(chars) 2584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Strip leading tabs and spaces 2604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef lstrip(s, chars=None): 2614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """lstrip(s [,chars]) -> string 2624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s with leading whitespace removed. 2644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If chars is given and not None, remove characters in chars instead. 2654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.lstrip(chars) 2684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Strip trailing tabs and spaces 2704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef rstrip(s, chars=None): 2714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """rstrip(s [,chars]) -> string 2724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s with trailing whitespace removed. 2744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If chars is given and not None, remove characters in chars instead. 2754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.rstrip(chars) 2784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Split a string into a list of space/tab-separated words 2814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef split(s, sep=None, maxsplit=-1): 2824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """split(s [,sep [,maxsplit]]) -> list of strings 2834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a list of the words in the string s, using sep as the 2854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm delimiter string. If maxsplit is given, splits at no more than 2864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm maxsplit places (resulting in at most maxsplit+1 words). If sep 2874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm is not specified or is None, any whitespace string is a separator. 2884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (split and splitfields are synonymous) 2904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.split(sep, maxsplit) 2934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmsplitfields = split 2944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Split a string into a list of space/tab-separated words 2964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef rsplit(s, sep=None, maxsplit=-1): 2974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """rsplit(s [,sep [,maxsplit]]) -> list of strings 2984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a list of the words in the string s, using sep as the 3004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm delimiter string, starting at the end of the string and working 3014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm to the front. If maxsplit is given, at most maxsplit splits are 3024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm done. If sep is not specified or is None, any whitespace string 3034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm is a separator. 3044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.rsplit(sep, maxsplit) 3064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Join fields with optional separator 3084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef join(words, sep = ' '): 3094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """join(list [,sep]) -> string 3104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a string composed of the words in list, with 3124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm intervening occurrences of sep. The default separator is a 3134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm single space. 3144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (joinfields and join are synonymous) 3164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return sep.join(words) 3194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmjoinfields = join 3204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Find substring, raise exception if not found 3224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef index(s, *args): 3234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """index(s, sub [,start [,end]]) -> int 3244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Like find but raises ValueError when the substring is not found. 3264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.index(*args) 3294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Find last substring, raise exception if not found 3314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef rindex(s, *args): 3324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """rindex(s, sub [,start [,end]]) -> int 3334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Like rfind but raises ValueError when the substring is not found. 3354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.rindex(*args) 3384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Count non-overlapping occurrences of substring 3404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef count(s, *args): 3414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """count(s, sub[, start[,end]]) -> int 3424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return the number of occurrences of substring sub in string 3444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm s[start:end]. Optional arguments start and end are 3454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm interpreted as in slice notation. 3464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.count(*args) 3494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Find substring, return -1 if not found 3514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef find(s, *args): 3524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """find(s, sub [,start [,end]]) -> in 3534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return the lowest index in s where substring sub is found, 3554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm such that sub is contained within s[start,end]. Optional 3564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm arguments start and end are interpreted as in slice notation. 3574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return -1 on failure. 3594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.find(*args) 3624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Find last substring, return -1 if not found 3644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef rfind(s, *args): 3654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """rfind(s, sub [,start [,end]]) -> int 3664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return the highest index in s where substring sub is found, 3684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm such that sub is contained within s[start,end]. Optional 3694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm arguments start and end are interpreted as in slice notation. 3704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return -1 on failure. 3724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.rfind(*args) 3754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# for a bit of speed 3774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_float = float 3784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_int = int 3794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_long = long 3804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Convert string to float 3824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef atof(s): 3834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """atof(s) -> float 3844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return the floating point number represented by the string s. 3864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _float(s) 3894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Convert string to integer 3924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef atoi(s , base=10): 3934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """atoi(s [,base]) -> int 3944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return the integer represented by the string s in the given 3964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm base, which defaults to 10. The string s must consist of one 3974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm or more digits, possibly preceded by a sign. If base is 0, it 3984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm is chosen from the leading characters of s, 0 for octal, 0x or 3994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 0X for hexadecimal. If base is 16, a preceding 0x or 0X is 4004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm accepted. 4014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 4034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _int(s, base) 4044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Convert string to long integer 4074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef atol(s, base=10): 4084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """atol(s [,base]) -> long 4094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return the long integer represented by the string s in the 4114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm given base, which defaults to 10. The string s must consist 4124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm of one or more digits, possibly preceded by a sign. If base 4134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm is 0, it is chosen from the leading characters of s, 0 for 4144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm octal, 0x or 0X for hexadecimal. If base is 16, a preceding 4154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 0x or 0X is accepted. A trailing L or l is not accepted, 4164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unless base is 0. 4174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 4194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _long(s, base) 4204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Left-justify a string 4234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef ljust(s, width, *args): 4244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ljust(s, width[, fillchar]) -> string 4254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a left-justified version of s, in a field of the 4274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm specified width, padded with spaces as needed. The string is 4284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm never truncated. If specified the fillchar is used instead of spaces. 4294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 4314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.ljust(width, *args) 4324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Right-justify a string 4344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef rjust(s, width, *args): 4354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """rjust(s, width[, fillchar]) -> string 4364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a right-justified version of s, in a field of the 4384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm specified width, padded with spaces as needed. The string is 4394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm never truncated. If specified the fillchar is used instead of spaces. 4404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 4424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.rjust(width, *args) 4434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Center a string 4454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef center(s, width, *args): 4464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """center(s, width[, fillchar]) -> string 4474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a center version of s, in a field of the specified 4494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm width. padded with spaces as needed. The string is never 4504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm truncated. If specified the fillchar is used instead of spaces. 4514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 4534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.center(width, *args) 4544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Zero-fill a number, e.g., (12, 3) --> '012' and (-3, 3) --> '-03' 4564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Decadent feature: the argument may be a string or a number 4574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# (Use of this is deprecated; it should be a string as with ljust c.s.) 4584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef zfill(x, width): 4594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """zfill(x, width) -> string 4604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Pad a numeric string x with zeros on the left, to fill a field 4624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm of the specified width. The string x is never truncated. 4634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 4654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not isinstance(x, basestring): 4664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm x = repr(x) 4674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return x.zfill(width) 4684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Expand tabs in a string. 4704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Doesn't take non-printing chars into account, but does understand \n. 4714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef expandtabs(s, tabsize=8): 4724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """expandtabs(s [,tabsize]) -> string 4734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s with all tab characters replaced 4754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm by the appropriate number of spaces, depending on the current 4764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm column, and the tabsize (default 8). 4774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 4794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.expandtabs(tabsize) 4804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Character translation through look-up table. 4824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef translate(s, table, deletions=""): 4834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """translate(s,table [,deletions]) -> string 4844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s, where all characters occurring 4864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm in the optional argument deletions are removed, and the 4874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm remaining characters have been mapped through the given 4884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm translation table, which must be a string of length 256. The 4894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm deletions argument is not allowed for Unicode strings. 4904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 4924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if deletions or table is None: 4934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.translate(table, deletions) 4944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 4954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Add s[:0] so that if s is Unicode and table is an 8-bit string, 4964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # table is converted to Unicode. This means that table *cannot* 4974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # be a dictionary -- for that feature, use u.translate() directly. 4984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.translate(table + s[:0]) 4994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Capitalize a string, e.g. "aBc dEf" -> "Abc def". 5014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef capitalize(s): 5024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """capitalize(s) -> string 5034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s with only its first character 5054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm capitalized. 5064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 5084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.capitalize() 5094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Substring replacement (global) 5114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef replace(s, old, new, maxreplace=-1): 5124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """replace (str, old, new[, maxreplace]) -> string 5134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of string str with all occurrences of substring 5154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm old replaced by new. If the optional argument maxreplace is 5164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm given, only the first maxreplace occurrences are replaced. 5174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 5194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.replace(old, new, maxreplace) 5204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Try importing optional built-in module "strop" -- if it exists, 5234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# it redefines some string operations that are 100-1000 times faster. 5244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# It also defines values for whitespace, lowercase and uppercase 5254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# that match <ctype.h>'s definitions. 5264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtry: 5284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from strop import maketrans, lowercase, uppercase, whitespace 5294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm letters = lowercase + uppercase 5304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmexcept ImportError: 5314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass # Use the original versions 5324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm######################################################################## 5344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# the Formatter class 5354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# see PEP 3101 for details and purpose of this class 5364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# The hard parts are reused from the C implementation. They're exposed as "_" 5384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# prefixed methods of str and unicode. 5394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# The overall parser is implemented in str._formatter_parser. 5414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# The field name parser is implemented in str._formatter_field_name_split 5424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass Formatter(object): 5444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def format(self, format_string, *args, **kwargs): 5454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self.vformat(format_string, args, kwargs) 5464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def vformat(self, format_string, args, kwargs): 5484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm used_args = set() 5494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = self._vformat(format_string, args, kwargs, used_args, 2) 5504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check_unused_args(used_args, args, kwargs) 5514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return result 5524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _vformat(self, format_string, args, kwargs, used_args, recursion_depth): 5544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if recursion_depth < 0: 5554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise ValueError('Max string recursion exceeded') 5564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = [] 5574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for literal_text, field_name, format_spec, conversion in \ 5584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.parse(format_string): 5594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # output the literal text 5614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if literal_text: 5624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.append(literal_text) 5634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # if there's a field, output it 5654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if field_name is not None: 5664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # this is some markup, find the object and do 5674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # the formatting 5684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # given the field_name, find the object it references 5704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # and the argument it came from 5714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm obj, arg_used = self.get_field(field_name, args, kwargs) 5724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm used_args.add(arg_used) 5734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # do any conversion on the resulting object 5754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm obj = self.convert_field(obj, conversion) 5764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # expand the format spec, if needed 5784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm format_spec = self._vformat(format_spec, args, kwargs, 5794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm used_args, recursion_depth-1) 5804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # format the object and append to the result 5824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.append(self.format_field(obj, format_spec)) 5834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return ''.join(result) 5854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def get_value(self, key, args, kwargs): 5884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if isinstance(key, (int, long)): 5894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return args[key] 5904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 5914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return kwargs[key] 5924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def check_unused_args(self, used_args, args, kwargs): 5954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 5964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def format_field(self, value, format_spec): 5994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return format(value, format_spec) 6004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def convert_field(self, value, conversion): 6034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # do any conversion on the resulting object 6044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if conversion == 'r': 6054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return repr(value) 6064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif conversion == 's': 6074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return str(value) 6084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif conversion is None: 6094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return value 6104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise ValueError("Unknown conversion specifier {0!s}".format(conversion)) 6114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # returns an iterable that contains tuples of the form: 6144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # (literal_text, field_name, format_spec, conversion) 6154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # literal_text can be zero length 6164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # field_name can be None, in which case there's no 6174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # object to format and output 6184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # if field_name is not None, it is looked up, formatted 6194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # with format_spec and conversion and then used 6204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def parse(self, format_string): 6214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return format_string._formatter_parser() 6224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # given a field_name, find the object it references. 6254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # field_name: the field being looked up, e.g. "0.name" 6264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # or "lookup[3]" 6274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # used_args: a set of which args have been used 6284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # args, kwargs: as passed in to vformat 6294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def get_field(self, field_name, args, kwargs): 6304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm first, rest = field_name._formatter_field_name_split() 6314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm obj = self.get_value(first, args, kwargs) 6334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # loop through the rest of the field_name, doing 6354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # getattr or getitem as needed 6364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for is_attr, i in rest: 6374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if is_attr: 6384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm obj = getattr(obj, i) 6394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 6404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm obj = obj[i] 6414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 6424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return obj, first 643