14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# module 'string' -- A collection of string operations 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Warning: most of the code you see here isn't normally used nowadays. With 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Python 1.6, many of these functions are implemented as methods on the 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# standard string object. They used to be implemented by a built-in module 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# called strop, but strop is now obsolete itself. 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""Common string manipulations. 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPublic module variables: 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmwhitespace -- a string containing all characters considered whitespace 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmlowercase -- a string containing all characters considered lowercase letters 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmuppercase -- a string containing all characters considered uppercase letters 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmletters -- a string containing all characters considered letters 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdigits -- a string containing all characters considered decimal digits 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmhexdigits -- a string containing all characters considered hexadecimal digits 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmoctdigits -- a string containing all characters considered octal digits 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm""" 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom warnings import warnpy3k 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmwarnpy3k("the stringold module has been removed in Python 3.0", stacklevel=2) 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdel warnpy3k 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Some strings for ctype-style character classification 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmwhitespace = ' \t\n\r\v\f' 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmlowercase = 'abcdefghijklmnopqrstuvwxyz' 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmuppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmletters = lowercase + uppercase 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdigits = '0123456789' 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmhexdigits = digits + 'abcdef' + 'ABCDEF' 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmoctdigits = '01234567' 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Case conversion helpers 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_idmap = '' 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfor i in range(256): _idmap = _idmap + chr(i) 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdel i 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Backward compatible names for exceptions 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmindex_error = ValueError 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmatoi_error = ValueError 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmatof_error = ValueError 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmatol_error = ValueError 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# convert UPPER CASE letters to lower case 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef lower(s): 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """lower(s) -> string 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s converted to lowercase. 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.lower() 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Convert lower case letters to UPPER CASE 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef upper(s): 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """upper(s) -> string 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s converted to uppercase. 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.upper() 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Swap lower case letters and UPPER CASE 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef swapcase(s): 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """swapcase(s) -> string 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s with upper case characters 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm converted to lowercase and vice versa. 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.swapcase() 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Strip leading and trailing tabs and spaces 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef strip(s): 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """strip(s) -> string 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s with leading and trailing 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm whitespace removed. 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.strip() 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Strip leading tabs and spaces 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef lstrip(s): 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """lstrip(s) -> string 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s with leading whitespace removed. 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.lstrip() 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Strip trailing tabs and spaces 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef rstrip(s): 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """rstrip(s) -> string 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s with trailing whitespace 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm removed. 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.rstrip() 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Split a string into a list of space/tab-separated words 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef split(s, sep=None, maxsplit=0): 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """split(str [,sep [,maxsplit]]) -> list of strings 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a list of the words in the string s, using sep as the 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm delimiter string. If maxsplit is nonzero, splits into at most 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm maxsplit words If sep is not specified, any whitespace string 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm is a separator. Maxsplit defaults to 0. 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (split and splitfields are synonymous) 1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.split(sep, maxsplit) 1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmsplitfields = split 1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Join fields with optional separator 1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef join(words, sep = ' '): 1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """join(list [,sep]) -> string 1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a string composed of the words in list, with 1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm intervening occurrences of sep. The default separator is a 1244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm single space. 1254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (joinfields and join are synonymous) 1274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 1294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return sep.join(words) 1304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmjoinfields = join 1314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# for a little bit of speed 1334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_apply = apply 1344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Find substring, raise exception if not found 1364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef index(s, *args): 1374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """index(s, sub [,start [,end]]) -> int 1384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Like find but raises ValueError when the substring is not found. 1404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 1424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _apply(s.index, args) 1434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Find last substring, raise exception if not found 1454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef rindex(s, *args): 1464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """rindex(s, sub [,start [,end]]) -> int 1474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Like rfind but raises ValueError when the substring is not found. 1494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 1514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _apply(s.rindex, args) 1524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Count non-overlapping occurrences of substring 1544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef count(s, *args): 1554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """count(s, sub[, start[,end]]) -> int 1564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return the number of occurrences of substring sub in string 1584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm s[start:end]. Optional arguments start and end are 1594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm interpreted as in slice notation. 1604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 1624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _apply(s.count, args) 1634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Find substring, return -1 if not found 1654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef find(s, *args): 1664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """find(s, sub [,start [,end]]) -> in 1674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return the lowest index in s where substring sub is found, 1694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm such that sub is contained within s[start,end]. Optional 1704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm arguments start and end are interpreted as in slice notation. 1714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return -1 on failure. 1734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 1754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _apply(s.find, args) 1764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Find last substring, return -1 if not found 1784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef rfind(s, *args): 1794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """rfind(s, sub [,start [,end]]) -> int 1804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return the highest index in s where substring sub is found, 1824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm such that sub is contained within s[start,end]. Optional 1834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm arguments start and end are interpreted as in slice notation. 1844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return -1 on failure. 1864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 1884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _apply(s.rfind, args) 1894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# for a bit of speed 1914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_float = float 1924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_int = int 1934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_long = long 1944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_StringType = type('') 1954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Convert string to float 1974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef atof(s): 1984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """atof(s) -> float 1994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return the floating point number represented by the string s. 2014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if type(s) == _StringType: 2044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _float(s) 2054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 2064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise TypeError('argument 1: expected string, %s found' % 2074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm type(s).__name__) 2084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Convert string to integer 2104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef atoi(*args): 2114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """atoi(s [,base]) -> int 2124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return the integer represented by the string s in the given 2144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm base, which defaults to 10. The string s must consist of one 2154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm or more digits, possibly preceded by a sign. If base is 0, it 2164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm is chosen from the leading characters of s, 0 for octal, 0x or 2174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 0X for hexadecimal. If base is 16, a preceding 0x or 0X is 2184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm accepted. 2194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 2224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm s = args[0] 2234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except IndexError: 2244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise TypeError('function requires at least 1 argument: %d given' % 2254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm len(args)) 2264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Don't catch type error resulting from too many arguments to int(). The 2274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # error message isn't compatible but the error type is, and this function 2284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # is complicated enough already. 2294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if type(s) == _StringType: 2304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _apply(_int, args) 2314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 2324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise TypeError('argument 1: expected string, %s found' % 2334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm type(s).__name__) 2344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Convert string to long integer 2374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef atol(*args): 2384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """atol(s [,base]) -> long 2394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return the long integer represented by the string s in the 2414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm given base, which defaults to 10. The string s must consist 2424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm of one or more digits, possibly preceded by a sign. If base 2434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm is 0, it is chosen from the leading characters of s, 0 for 2444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm octal, 0x or 0X for hexadecimal. If base is 16, a preceding 2454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 0x or 0X is accepted. A trailing L or l is not accepted, 2464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unless base is 0. 2474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 2504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm s = args[0] 2514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except IndexError: 2524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise TypeError('function requires at least 1 argument: %d given' % 2534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm len(args)) 2544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Don't catch type error resulting from too many arguments to long(). The 2554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # error message isn't compatible but the error type is, and this function 2564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # is complicated enough already. 2574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if type(s) == _StringType: 2584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _apply(_long, args) 2594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 2604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise TypeError('argument 1: expected string, %s found' % 2614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm type(s).__name__) 2624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Left-justify a string 2654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef ljust(s, width): 2664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ljust(s, width) -> string 2674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a left-justified version of s, in a field of the 2694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm specified width, padded with spaces as needed. The string is 2704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm never truncated. 2714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm n = width - len(s) 2744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if n <= 0: return s 2754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s + ' '*n 2764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Right-justify a string 2784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef rjust(s, width): 2794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """rjust(s, width) -> string 2804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a right-justified version of s, in a field of the 2824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm specified width, padded with spaces as needed. The string is 2834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm never truncated. 2844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm n = width - len(s) 2874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if n <= 0: return s 2884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return ' '*n + s 2894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Center a string 2914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef center(s, width): 2924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """center(s, width) -> string 2934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a center version of s, in a field of the specified 2954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm width. padded with spaces as needed. The string is never 2964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm truncated. 2974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm n = width - len(s) 3004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if n <= 0: return s 3014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm half = n/2 3024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if n%2 and width%2: 3034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # This ensures that center(center(s, i), j) = center(s, j) 3044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm half = half+1 3054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return ' '*half + s + ' '*(n-half) 3064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Zero-fill a number, e.g., (12, 3) --> '012' and (-3, 3) --> '-03' 3084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Decadent feature: the argument may be a string or a number 3094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# (Use of this is deprecated; it should be a string as with ljust c.s.) 3104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef zfill(x, width): 3114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """zfill(x, width) -> string 3124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Pad a numeric string x with zeros on the left, to fill a field 3144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm of the specified width. The string x is never truncated. 3154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if type(x) == type(''): s = x 3184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: s = repr(x) 3194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm n = len(s) 3204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if n >= width: return s 3214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sign = '' 3224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if s[0] in ('-', '+'): 3234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sign, s = s[0], s[1:] 3244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return sign + '0'*(width-n) + s 3254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Expand tabs in a string. 3274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Doesn't take non-printing chars into account, but does understand \n. 3284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef expandtabs(s, tabsize=8): 3294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """expandtabs(s [,tabsize]) -> string 3304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s with all tab characters replaced 3324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm by the appropriate number of spaces, depending on the current 3334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm column, and the tabsize (default 8). 3344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm res = line = '' 3374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for c in s: 3384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if c == '\t': 3394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c = ' '*(tabsize - len(line) % tabsize) 3404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm line = line + c 3414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if c == '\n': 3424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm res = res + line 3434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm line = '' 3444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return res + line 3454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Character translation through look-up table. 3474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef translate(s, table, deletions=""): 3484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """translate(s,table [,deletechars]) -> string 3494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s, where all characters occurring 3514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm in the optional argument deletechars are removed, and the 3524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm remaining characters have been mapped through the given 3534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm translation table, which must be a string of length 256. 3544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.translate(table, deletions) 3574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Capitalize a string, e.g. "aBc dEf" -> "Abc def". 3594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef capitalize(s): 3604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """capitalize(s) -> string 3614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of the string s with only its first character 3634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm capitalized. 3644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.capitalize() 3674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Capitalize the words in a string, e.g. " aBc dEf " -> "Abc Def". 3694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef capwords(s, sep=None): 3704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """capwords(s, [sep]) -> string 3714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Split the argument into words using split, capitalize each 3734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm word using capitalize, and join the capitalized words using 3744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm join. Note that this replaces runs of whitespace characters by 3754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a single space. 3764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return join(map(capitalize, s.split(sep)), sep or ' ') 3794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Construct a translation string 3814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_idmapL = None 3824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef maketrans(fromstr, tostr): 3834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """maketrans(frm, to) -> string 3844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a translation table (a string of 256 bytes long) 3864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suitable for use in string.translate. The strings frm and to 3874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm must be of the same length. 3884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if len(fromstr) != len(tostr): 3914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise ValueError, "maketrans arguments must have same length" 3924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm global _idmapL 3934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not _idmapL: 3944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm _idmapL = list(_idmap) 3954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm L = _idmapL[:] 3964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm fromstr = map(ord, fromstr) 3974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for i in range(len(fromstr)): 3984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm L[fromstr[i]] = tostr[i] 3994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return join(L, "") 4004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Substring replacement (global) 4024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef replace(s, old, new, maxsplit=0): 4034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """replace (str, old, new[, maxsplit]) -> string 4044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Return a copy of string str with all occurrences of substring 4064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm old replaced by new. If the optional argument maxsplit is 4074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm given, only the first maxsplit occurrences are replaced. 4084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 4104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return s.replace(old, new, maxsplit) 4114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# XXX: transitional 4144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# 4154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# If string objects do not have methods, then we need to use the old string.py 4164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# library, which uses strop for many more things than just the few outlined 4174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# below. 4184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtry: 4194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ''.upper 4204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmexcept AttributeError: 4214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from stringold import * 4224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Try importing optional built-in module "strop" -- if it exists, 4244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# it redefines some string operations that are 100-1000 times faster. 4254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# It also defines values for whitespace, lowercase and uppercase 4264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# that match <ctype.h>'s definitions. 4274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtry: 4294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from strop import maketrans, lowercase, uppercase, whitespace 4304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm letters = lowercase + uppercase 4314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmexcept ImportError: 4324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass # Use the original versions 433