blob: fd9cc99231ec49edad8c0c609a1729ff9afd6ac4 [file] [log] [blame]
Skip Montanaro0b874442003-10-03 14:05:26 +00001"""A collection of string operations (most are no longer used).
Guido van Rossumc6360141990-10-13 19:23:40 +00002
Skip Montanaro0b874442003-10-03 14:05:26 +00003Warning: most of the code you see here isn't normally used nowadays.
4Beginning with Python 1.6, many of these functions are implemented as
5methods on the standard string object. They used to be implemented by
6a built-in module called strop, but strop is now obsolete itself.
Guido van Rossum20032041997-12-29 19:26:28 +00007
8Public module variables:
9
10whitespace -- a string containing all characters considered whitespace
11lowercase -- a string containing all characters considered lowercase letters
12uppercase -- a string containing all characters considered uppercase letters
13letters -- a string containing all characters considered letters
14digits -- a string containing all characters considered decimal digits
15hexdigits -- a string containing all characters considered hexadecimal digits
16octdigits -- a string containing all characters considered octal digits
Fred Drakefd64c592000-09-18 19:38:11 +000017punctuation -- a string containing all characters considered punctuation
18printable -- a string containing all characters considered printable
Guido van Rossum20032041997-12-29 19:26:28 +000019
20"""
21
Guido van Rossumc6360141990-10-13 19:23:40 +000022# Some strings for ctype-style character classification
Guido van Rossum8e2ec561993-07-29 09:37:38 +000023whitespace = ' \t\n\r\v\f'
Guido van Rossumc6360141990-10-13 19:23:40 +000024lowercase = 'abcdefghijklmnopqrstuvwxyz'
25uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
26letters = lowercase + uppercase
Fred Drake960fdf92001-07-20 18:38:26 +000027ascii_lowercase = lowercase
28ascii_uppercase = uppercase
29ascii_letters = ascii_lowercase + ascii_uppercase
Guido van Rossumc6360141990-10-13 19:23:40 +000030digits = '0123456789'
31hexdigits = digits + 'abcdef' + 'ABCDEF'
32octdigits = '01234567'
Tim Peters495ad3c2001-01-15 01:36:40 +000033punctuation = """!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
Fred Drake6b2320f2000-09-18 16:46:17 +000034printable = digits + letters + punctuation + whitespace
Guido van Rossumc6360141990-10-13 19:23:40 +000035
36# Case conversion helpers
Martin v. Löwis5357c652002-10-14 20:03:40 +000037# Use str to convert Unicode literal in case of -U
Barry Warsaw8bee7612004-08-25 02:22:30 +000038# Note that Cookie.py bogusly uses _idmap :(
Martin v. Löwis5357c652002-10-14 20:03:40 +000039l = map(chr, xrange(256))
40_idmap = str('').join(l)
41del l
Guido van Rossumc6360141990-10-13 19:23:40 +000042
Barry Warsaw8bee7612004-08-25 02:22:30 +000043# Functions which aren't available as string methods.
44
45# Capitalize the words in a string, e.g. " aBc dEf " -> "Abc Def".
46# See also regsub.capwords().
47def capwords(s, sep=None):
48 """capwords(s, [sep]) -> string
49
50 Split the argument into words using split, capitalize each
51 word using capitalize, and join the capitalized words using
52 join. Note that this replaces runs of whitespace characters by
53 a single space.
54
55 """
56 return (sep or ' ').join([x.capitalize() for x in s.split(sep)])
57
58
59# Construct a translation string
60_idmapL = None
61def maketrans(fromstr, tostr):
62 """maketrans(frm, to) -> string
63
64 Return a translation table (a string of 256 bytes long)
65 suitable for use in string.translate. The strings frm and to
66 must be of the same length.
67
68 """
69 if len(fromstr) != len(tostr):
70 raise ValueError, "maketrans arguments must have same length"
71 global _idmapL
72 if not _idmapL:
73 _idmapL = map(None, _idmap)
74 L = _idmapL[:]
75 fromstr = map(ord, fromstr)
76 for i in range(len(fromstr)):
77 L[fromstr[i]] = tostr[i]
78 return ''.join(L)
79
80
81
Raymond Hettinger0d58e2b2004-08-26 00:21:13 +000082####################################################################
Barry Warsaw8bee7612004-08-25 02:22:30 +000083import re as _re
84
Barry Warsaw12827c12004-09-10 03:08:08 +000085class _TemplateMetaclass(type):
86 pattern = r"""
87 (?P<escaped>%(delim)s{2}) | # Escape sequence of two delimiters
88 %(delim)s(?P<named>%(id)s) | # delimiter and a Python identifier
89 %(delim)s{(?P<braced>%(id)s)} | # delimiter and a braced identifier
90 (?P<bogus>%(delim)s) # Other ill-formed delimiter exprs
91 """
92
93 def __init__(cls, name, bases, dct):
94 super(_TemplateMetaclass, cls).__init__(name, bases, dct)
95 if 'pattern' in dct:
96 pattern = cls.pattern
97 else:
98 pattern = _TemplateMetaclass.pattern % {
99 'delim' : cls.delimiter,
100 'id' : cls.idpattern,
101 }
102 cls.pattern = _re.compile(pattern, _re.IGNORECASE | _re.VERBOSE)
103
104
105class Template:
Barry Warsaw8bee7612004-08-25 02:22:30 +0000106 """A string class for supporting $-substitutions."""
Barry Warsaw12827c12004-09-10 03:08:08 +0000107 __metaclass__ = _TemplateMetaclass
108
109 delimiter = r'\$'
110 idpattern = r'[_a-z][_a-z0-9]*'
111
112 def __init__(self, template):
113 self.template = template
Barry Warsaw8bee7612004-08-25 02:22:30 +0000114
115 # Search for $$, $identifier, ${identifier}, and any bare $'s
Barry Warsaw8bee7612004-08-25 02:22:30 +0000116
Barry Warsaw12827c12004-09-10 03:08:08 +0000117 def _bogus(self, mo):
118 i = mo.start('bogus')
119 lines = self.template[:i].splitlines(True)
120 if not lines:
121 colno = 1
122 lineno = 1
123 else:
124 colno = i - len(''.join(lines[:-1]))
125 lineno = len(lines)
126 raise ValueError('Invalid placeholder in string: line %d, col %d' %
127 (lineno, colno))
128
129 def substitute(self, mapping):
Barry Warsaw8bee7612004-08-25 02:22:30 +0000130 def convert(mo):
Raymond Hettinger0d58e2b2004-08-26 00:21:13 +0000131 if mo.group('escaped') is not None:
Barry Warsaw8bee7612004-08-25 02:22:30 +0000132 return '$'
Raymond Hettinger0d58e2b2004-08-26 00:21:13 +0000133 if mo.group('bogus') is not None:
Barry Warsaw12827c12004-09-10 03:08:08 +0000134 self._bogus(mo)
Raymond Hettinger0d58e2b2004-08-26 00:21:13 +0000135 val = mapping[mo.group('named') or mo.group('braced')]
Barry Warsaw12827c12004-09-10 03:08:08 +0000136 # We use this idiom instead of str() because the latter will fail
137 # if val is a Unicode containing non-ASCII characters.
138 return '%s' % val
139 return self.pattern.sub(convert, self.template)
Barry Warsaw8bee7612004-08-25 02:22:30 +0000140
Barry Warsaw12827c12004-09-10 03:08:08 +0000141 def safe_substitute(self, mapping):
Barry Warsaw8bee7612004-08-25 02:22:30 +0000142 def convert(mo):
Raymond Hettinger0d58e2b2004-08-26 00:21:13 +0000143 if mo.group('escaped') is not None:
Barry Warsaw8bee7612004-08-25 02:22:30 +0000144 return '$'
Raymond Hettinger0d58e2b2004-08-26 00:21:13 +0000145 if mo.group('bogus') is not None:
Barry Warsaw12827c12004-09-10 03:08:08 +0000146 self._bogus(mo)
Raymond Hettinger0d58e2b2004-08-26 00:21:13 +0000147 named = mo.group('named')
Barry Warsaw8bee7612004-08-25 02:22:30 +0000148 if named is not None:
149 try:
Barry Warsaw12827c12004-09-10 03:08:08 +0000150 # We use this idiom instead of str() because the latter
151 # will fail if val is a Unicode containing non-ASCII
152 return '%s' % mapping[named]
Barry Warsaw8bee7612004-08-25 02:22:30 +0000153 except KeyError:
154 return '$' + named
Raymond Hettinger0d58e2b2004-08-26 00:21:13 +0000155 braced = mo.group('braced')
Barry Warsaw8bee7612004-08-25 02:22:30 +0000156 try:
Barry Warsaw12827c12004-09-10 03:08:08 +0000157 return '%s' % mapping[braced]
Barry Warsaw8bee7612004-08-25 02:22:30 +0000158 except KeyError:
159 return '${' + braced + '}'
Barry Warsaw12827c12004-09-10 03:08:08 +0000160 return self.pattern.sub(convert, self.template)
Barry Warsaw8bee7612004-08-25 02:22:30 +0000161
162
163
Raymond Hettinger0d58e2b2004-08-26 00:21:13 +0000164####################################################################
Barry Warsaw8bee7612004-08-25 02:22:30 +0000165# NOTE: Everything below here is deprecated. Use string methods instead.
166# This stuff will go away in Python 3.0.
167
Guido van Rossum710c3521994-08-17 13:16:11 +0000168# Backward compatible names for exceptions
169index_error = ValueError
170atoi_error = ValueError
171atof_error = ValueError
172atol_error = ValueError
173
Guido van Rossumc6360141990-10-13 19:23:40 +0000174# convert UPPER CASE letters to lower case
175def lower(s):
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000176 """lower(s) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000177
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000178 Return a copy of the string s converted to lowercase.
Guido van Rossum20032041997-12-29 19:26:28 +0000179
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000180 """
181 return s.lower()
Guido van Rossumc6360141990-10-13 19:23:40 +0000182
183# Convert lower case letters to UPPER CASE
184def upper(s):
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000185 """upper(s) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000186
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000187 Return a copy of the string s converted to uppercase.
Guido van Rossum20032041997-12-29 19:26:28 +0000188
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000189 """
190 return s.upper()
Guido van Rossumc6360141990-10-13 19:23:40 +0000191
192# Swap lower case letters and UPPER CASE
193def swapcase(s):
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000194 """swapcase(s) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000195
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000196 Return a copy of the string s with upper case characters
197 converted to lowercase and vice versa.
Guido van Rossum20032041997-12-29 19:26:28 +0000198
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000199 """
200 return s.swapcase()
Guido van Rossumc6360141990-10-13 19:23:40 +0000201
202# Strip leading and trailing tabs and spaces
Martin v. Löwis1f046102002-11-08 12:09:59 +0000203def strip(s, chars=None):
Neal Norwitza4864a22002-11-14 03:31:32 +0000204 """strip(s [,chars]) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000205
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000206 Return a copy of the string s with leading and trailing
207 whitespace removed.
Neal Norwitzffe33b72003-04-10 22:35:32 +0000208 If chars is given and not None, remove characters in chars instead.
Neal Norwitza4864a22002-11-14 03:31:32 +0000209 If chars is unicode, S will be converted to unicode before stripping.
Guido van Rossum20032041997-12-29 19:26:28 +0000210
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000211 """
Martin v. Löwis1f046102002-11-08 12:09:59 +0000212 return s.strip(chars)
Guido van Rossumc6360141990-10-13 19:23:40 +0000213
Guido van Rossum306a8a61996-08-08 18:40:59 +0000214# Strip leading tabs and spaces
Neal Norwitzffe33b72003-04-10 22:35:32 +0000215def lstrip(s, chars=None):
216 """lstrip(s [,chars]) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000217
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000218 Return a copy of the string s with leading whitespace removed.
Neal Norwitzffe33b72003-04-10 22:35:32 +0000219 If chars is given and not None, remove characters in chars instead.
Guido van Rossum20032041997-12-29 19:26:28 +0000220
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000221 """
Neal Norwitzffe33b72003-04-10 22:35:32 +0000222 return s.lstrip(chars)
Guido van Rossum306a8a61996-08-08 18:40:59 +0000223
224# Strip trailing tabs and spaces
Neal Norwitzffe33b72003-04-10 22:35:32 +0000225def rstrip(s, chars=None):
226 """rstrip(s [,chars]) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000227
Neal Norwitzffe33b72003-04-10 22:35:32 +0000228 Return a copy of the string s with trailing whitespace removed.
229 If chars is given and not None, remove characters in chars instead.
Guido van Rossum20032041997-12-29 19:26:28 +0000230
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000231 """
Neal Norwitzffe33b72003-04-10 22:35:32 +0000232 return s.rstrip(chars)
Guido van Rossum306a8a61996-08-08 18:40:59 +0000233
234
Guido van Rossumc6360141990-10-13 19:23:40 +0000235# Split a string into a list of space/tab-separated words
Guido van Rossum8f0c5a72000-03-10 23:22:10 +0000236def split(s, sep=None, maxsplit=-1):
Fred Drakee4f13661999-11-04 19:19:48 +0000237 """split(s [,sep [,maxsplit]]) -> list of strings
Guido van Rossum20032041997-12-29 19:26:28 +0000238
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000239 Return a list of the words in the string s, using sep as the
Fred Drake14537542002-01-30 16:15:13 +0000240 delimiter string. If maxsplit is given, splits at no more than
241 maxsplit places (resulting in at most maxsplit+1 words). If sep
242 is not specified, any whitespace string is a separator.
Guido van Rossum20032041997-12-29 19:26:28 +0000243
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000244 (split and splitfields are synonymous)
Guido van Rossum20032041997-12-29 19:26:28 +0000245
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000246 """
247 return s.split(sep, maxsplit)
248splitfields = split
Guido van Rossumfac38b71991-04-07 13:42:19 +0000249
Hye-Shik Chang3ae811b2003-12-15 18:49:53 +0000250# Split a string into a list of space/tab-separated words
251def rsplit(s, sep=None, maxsplit=-1):
252 """rsplit(s [,sep [,maxsplit]]) -> list of strings
253
254 Return a list of the words in the string s, using sep as the
255 delimiter string, starting at the end of the string and working
256 to the front. If maxsplit is given, at most maxsplit splits are
257 done. If sep is not specified or is None, any whitespace string
258 is a separator.
259 """
260 return s.rsplit(sep, maxsplit)
261
Guido van Rossum2ab19921995-06-22 18:58:00 +0000262# Join fields with optional separator
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000263def join(words, sep = ' '):
264 """join(list [,sep]) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000265
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000266 Return a string composed of the words in list, with
Thomas Wouters7e474022000-07-16 12:04:32 +0000267 intervening occurrences of sep. The default separator is a
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000268 single space.
Guido van Rossum20032041997-12-29 19:26:28 +0000269
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000270 (joinfields and join are synonymous)
Guido van Rossum20032041997-12-29 19:26:28 +0000271
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000272 """
273 return sep.join(words)
274joinfields = join
275
Guido van Rossumd3166071993-05-24 14:16:22 +0000276# Find substring, raise exception if not found
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000277def index(s, *args):
278 """index(s, sub [,start [,end]]) -> int
Guido van Rossum20032041997-12-29 19:26:28 +0000279
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000280 Like find but raises ValueError when the substring is not found.
Guido van Rossum20032041997-12-29 19:26:28 +0000281
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000282 """
Fred Drake046d2722000-07-03 07:23:13 +0000283 return s.index(*args)
Guido van Rossumd3166071993-05-24 14:16:22 +0000284
Guido van Rossume65cce51993-11-08 15:05:21 +0000285# Find last substring, raise exception if not found
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000286def rindex(s, *args):
287 """rindex(s, sub [,start [,end]]) -> int
Guido van Rossum20032041997-12-29 19:26:28 +0000288
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000289 Like rfind but raises ValueError when the substring is not found.
Guido van Rossum20032041997-12-29 19:26:28 +0000290
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000291 """
Fred Drake046d2722000-07-03 07:23:13 +0000292 return s.rindex(*args)
Guido van Rossumb6775db1994-08-01 11:34:53 +0000293
294# Count non-overlapping occurrences of substring
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000295def count(s, *args):
296 """count(s, sub[, start[,end]]) -> int
Guido van Rossum20032041997-12-29 19:26:28 +0000297
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000298 Return the number of occurrences of substring sub in string
299 s[start:end]. Optional arguments start and end are
300 interpreted as in slice notation.
Guido van Rossum20032041997-12-29 19:26:28 +0000301
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000302 """
Fred Drake046d2722000-07-03 07:23:13 +0000303 return s.count(*args)
Guido van Rossume65cce51993-11-08 15:05:21 +0000304
Guido van Rossumd3166071993-05-24 14:16:22 +0000305# Find substring, return -1 if not found
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000306def find(s, *args):
307 """find(s, sub [,start [,end]]) -> in
Guido van Rossum20032041997-12-29 19:26:28 +0000308
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000309 Return the lowest index in s where substring sub is found,
310 such that sub is contained within s[start,end]. Optional
311 arguments start and end are interpreted as in slice notation.
Guido van Rossum20032041997-12-29 19:26:28 +0000312
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000313 Return -1 on failure.
Guido van Rossum20032041997-12-29 19:26:28 +0000314
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000315 """
Fred Drake046d2722000-07-03 07:23:13 +0000316 return s.find(*args)
Guido van Rossumc6360141990-10-13 19:23:40 +0000317
Guido van Rossume65cce51993-11-08 15:05:21 +0000318# Find last substring, return -1 if not found
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000319def rfind(s, *args):
320 """rfind(s, sub [,start [,end]]) -> int
Guido van Rossum20032041997-12-29 19:26:28 +0000321
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000322 Return the highest index in s where substring sub is found,
323 such that sub is contained within s[start,end]. Optional
324 arguments start and end are interpreted as in slice notation.
Guido van Rossum20032041997-12-29 19:26:28 +0000325
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000326 Return -1 on failure.
Guido van Rossum20032041997-12-29 19:26:28 +0000327
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000328 """
Fred Drake046d2722000-07-03 07:23:13 +0000329 return s.rfind(*args)
Guido van Rossume65cce51993-11-08 15:05:21 +0000330
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000331# for a bit of speed
332_float = float
333_int = int
334_long = long
Guido van Rossumd0753e21997-12-10 22:59:55 +0000335
Guido van Rossume61fa0a1993-10-22 13:56:35 +0000336# Convert string to float
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000337def atof(s):
338 """atof(s) -> float
Guido van Rossum20032041997-12-29 19:26:28 +0000339
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000340 Return the floating point number represented by the string s.
Guido van Rossum20032041997-12-29 19:26:28 +0000341
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000342 """
Guido van Rossum9e896b32000-04-05 20:11:21 +0000343 return _float(s)
344
Guido van Rossume61fa0a1993-10-22 13:56:35 +0000345
Guido van Rossumc6360141990-10-13 19:23:40 +0000346# Convert string to integer
Guido van Rossum9e896b32000-04-05 20:11:21 +0000347def atoi(s , base=10):
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000348 """atoi(s [,base]) -> int
Guido van Rossum20032041997-12-29 19:26:28 +0000349
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000350 Return the integer represented by the string s in the given
351 base, which defaults to 10. The string s must consist of one
352 or more digits, possibly preceded by a sign. If base is 0, it
353 is chosen from the leading characters of s, 0 for octal, 0x or
354 0X for hexadecimal. If base is 16, a preceding 0x or 0X is
355 accepted.
Guido van Rossum20032041997-12-29 19:26:28 +0000356
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000357 """
Guido van Rossum9e896b32000-04-05 20:11:21 +0000358 return _int(s, base)
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000359
Guido van Rossumc6360141990-10-13 19:23:40 +0000360
Guido van Rossume61fa0a1993-10-22 13:56:35 +0000361# Convert string to long integer
Guido van Rossum9e896b32000-04-05 20:11:21 +0000362def atol(s, base=10):
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000363 """atol(s [,base]) -> long
Guido van Rossum20032041997-12-29 19:26:28 +0000364
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000365 Return the long integer represented by the string s in the
366 given base, which defaults to 10. The string s must consist
367 of one or more digits, possibly preceded by a sign. If base
368 is 0, it is chosen from the leading characters of s, 0 for
369 octal, 0x or 0X for hexadecimal. If base is 16, a preceding
370 0x or 0X is accepted. A trailing L or l is not accepted,
371 unless base is 0.
Guido van Rossum20032041997-12-29 19:26:28 +0000372
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000373 """
Guido van Rossum9e896b32000-04-05 20:11:21 +0000374 return _long(s, base)
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000375
Guido van Rossume61fa0a1993-10-22 13:56:35 +0000376
Guido van Rossumc6360141990-10-13 19:23:40 +0000377# Left-justify a string
Raymond Hettinger4f8f9762003-11-26 08:21:35 +0000378def ljust(s, width, *args):
379 """ljust(s, width[, fillchar]) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000380
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000381 Return a left-justified version of s, in a field of the
382 specified width, padded with spaces as needed. The string is
Raymond Hettinger4f8f9762003-11-26 08:21:35 +0000383 never truncated. If specified the fillchar is used instead of spaces.
Guido van Rossum20032041997-12-29 19:26:28 +0000384
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000385 """
Raymond Hettinger4f8f9762003-11-26 08:21:35 +0000386 return s.ljust(width, *args)
Guido van Rossumc6360141990-10-13 19:23:40 +0000387
388# Right-justify a string
Raymond Hettinger4f8f9762003-11-26 08:21:35 +0000389def rjust(s, width, *args):
390 """rjust(s, width[, fillchar]) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000391
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000392 Return a right-justified version of s, in a field of the
393 specified width, padded with spaces as needed. The string is
Raymond Hettinger4f8f9762003-11-26 08:21:35 +0000394 never truncated. If specified the fillchar is used instead of spaces.
Guido van Rossum20032041997-12-29 19:26:28 +0000395
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000396 """
Raymond Hettinger4f8f9762003-11-26 08:21:35 +0000397 return s.rjust(width, *args)
Guido van Rossumc6360141990-10-13 19:23:40 +0000398
399# Center a string
Raymond Hettinger4f8f9762003-11-26 08:21:35 +0000400def center(s, width, *args):
401 """center(s, width[, fillchar]) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000402
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000403 Return a center version of s, in a field of the specified
404 width. padded with spaces as needed. The string is never
Raymond Hettinger4f8f9762003-11-26 08:21:35 +0000405 truncated. If specified the fillchar is used instead of spaces.
Guido van Rossum20032041997-12-29 19:26:28 +0000406
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000407 """
Raymond Hettinger4f8f9762003-11-26 08:21:35 +0000408 return s.center(width, *args)
Guido van Rossumc6360141990-10-13 19:23:40 +0000409
410# Zero-fill a number, e.g., (12, 3) --> '012' and (-3, 3) --> '-03'
411# Decadent feature: the argument may be a string or a number
412# (Use of this is deprecated; it should be a string as with ljust c.s.)
413def zfill(x, width):
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000414 """zfill(x, width) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000415
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000416 Pad a numeric string x with zeros on the left, to fill a field
417 of the specified width. The string x is never truncated.
Guido van Rossum20032041997-12-29 19:26:28 +0000418
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000419 """
Walter Dörwald65230a22002-06-03 15:58:32 +0000420 if not isinstance(x, basestring):
Walter Dörwald068325e2002-04-15 13:36:47 +0000421 x = repr(x)
422 return x.zfill(width)
Guido van Rossum6ff2e901992-03-27 15:13:31 +0000423
424# Expand tabs in a string.
425# Doesn't take non-printing chars into account, but does understand \n.
Guido van Rossum894a7bb1995-08-10 19:42:05 +0000426def expandtabs(s, tabsize=8):
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000427 """expandtabs(s [,tabsize]) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000428
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000429 Return a copy of the string s with all tab characters replaced
430 by the appropriate number of spaces, depending on the current
431 column, and the tabsize (default 8).
Guido van Rossum20032041997-12-29 19:26:28 +0000432
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000433 """
Fred Drake046d2722000-07-03 07:23:13 +0000434 return s.expandtabs(tabsize)
Guido van Rossum2db91351992-10-18 17:09:59 +0000435
Guido van Rossum25395281996-05-28 23:08:45 +0000436# Character translation through look-up table.
Guido van Rossumed7253c1996-07-23 18:12:39 +0000437def translate(s, table, deletions=""):
Guido van Rossum5aff7752000-12-19 02:39:08 +0000438 """translate(s,table [,deletions]) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000439
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000440 Return a copy of the string s, where all characters occurring
Guido van Rossum5aff7752000-12-19 02:39:08 +0000441 in the optional argument deletions are removed, and the
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000442 remaining characters have been mapped through the given
Guido van Rossum5aff7752000-12-19 02:39:08 +0000443 translation table, which must be a string of length 256. The
444 deletions argument is not allowed for Unicode strings.
Guido van Rossum20032041997-12-29 19:26:28 +0000445
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000446 """
Guido van Rossum5aff7752000-12-19 02:39:08 +0000447 if deletions:
448 return s.translate(table, deletions)
449 else:
450 # Add s[:0] so that if s is Unicode and table is an 8-bit string,
451 # table is converted to Unicode. This means that table *cannot*
452 # be a dictionary -- for that feature, use u.translate() directly.
453 return s.translate(table + s[:0])
Guido van Rossum2db91351992-10-18 17:09:59 +0000454
Guido van Rossum8775d8b1996-06-11 18:43:00 +0000455# Capitalize a string, e.g. "aBc dEf" -> "Abc def".
456def capitalize(s):
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000457 """capitalize(s) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000458
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000459 Return a copy of the string s with only its first character
460 capitalized.
Guido van Rossum20032041997-12-29 19:26:28 +0000461
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000462 """
463 return s.capitalize()
Guido van Rossum8775d8b1996-06-11 18:43:00 +0000464
Guido van Rossum1eb9a811997-03-25 16:50:31 +0000465# Substring replacement (global)
Guido van Rossum8f0c5a72000-03-10 23:22:10 +0000466def replace(s, old, new, maxsplit=-1):
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000467 """replace (str, old, new[, maxsplit]) -> string
Guido van Rossum20032041997-12-29 19:26:28 +0000468
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000469 Return a copy of string str with all occurrences of substring
470 old replaced by new. If the optional argument maxsplit is
471 given, only the first maxsplit occurrences are replaced.
Guido van Rossum20032041997-12-29 19:26:28 +0000472
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000473 """
474 return s.replace(old, new, maxsplit)
Guido van Rossum1eb9a811997-03-25 16:50:31 +0000475
476
Guido van Rossum2db91351992-10-18 17:09:59 +0000477# Try importing optional built-in module "strop" -- if it exists,
478# it redefines some string operations that are 100-1000 times faster.
Guido van Rossum8e2ec561993-07-29 09:37:38 +0000479# It also defines values for whitespace, lowercase and uppercase
480# that match <ctype.h>'s definitions.
Guido van Rossum2db91351992-10-18 17:09:59 +0000481
482try:
Barry Warsaw226ae6c1999-10-12 19:54:53 +0000483 from strop import maketrans, lowercase, uppercase, whitespace
484 letters = lowercase + uppercase
Guido van Rossumb6775db1994-08-01 11:34:53 +0000485except ImportError:
Fred Drake857c4c32000-02-10 16:21:11 +0000486 pass # Use the original versions