String method conversion.
diff --git a/Lib/distutils/cmd.py b/Lib/distutils/cmd.py
index ce44829..cec4bff 100644
--- a/Lib/distutils/cmd.py
+++ b/Lib/distutils/cmd.py
@@ -9,7 +9,7 @@
 
 __revision__ = "$Id$"
 
-import sys, os, string, re
+import sys, os, re
 from types import *
 from distutils.errors import *
 from distutils import util, dir_util, file_util, archive_util, dep_util
@@ -161,7 +161,7 @@
         print indent + header
         indent = indent + "  "
         for (option, _, _) in self.user_options:
-            option = string.translate(option, longopt_xlate)
+            option = option.translate(longopt_xlate)
             if option[-1] == "=":
                 option = option[:-1]
             value = getattr(self, option)
@@ -421,7 +421,7 @@
         """
         if exec_msg is None:
             exec_msg = "generating %s from %s" % \
-                       (outfile, string.join(infiles, ', '))
+                       (outfile, ', '.join(infiles))
         if skip_msg is None:
             skip_msg = "skipping %s (inputs unchanged)" % outfile
         
diff --git a/Lib/lib-old/codehack.py b/Lib/lib-old/codehack.py
index 6453db5..52ac6be 100644
--- a/Lib/lib-old/codehack.py
+++ b/Lib/lib-old/codehack.py
@@ -48,7 +48,7 @@
 	if ord(code[0]) == SET_LINENO:
 		lineno = ord(code[1]) | ord(code[2]) << 8
 		line = linecache.getline(filename, lineno)
-		words = string.split(line)
+		words = line.split()
 		if len(words) >= 2 and words[0] in ('def', 'class'):
 			name = words[1]
 			for i in range(len(name)):
diff --git a/Lib/lib-old/grep.py b/Lib/lib-old/grep.py
index 6f74fd3..6f66081 100644
--- a/Lib/lib-old/grep.py
+++ b/Lib/lib-old/grep.py
@@ -2,7 +2,6 @@
 
 import regex
 from regex_syntax import *
-import string
 
 opt_show_where = 0
 opt_show_filename = 0
@@ -59,7 +58,7 @@
 def showline(filename, lineno, line, prog):
 	if line[-1:] == '\n': line = line[:-1]
 	if opt_show_lineno:
-		prefix = string.rjust(`lineno`, 3) + ': '
+		prefix = `lineno`.rjust(, 3) + ': '
 	else:
 		prefix = ''
 	if opt_show_filename:
diff --git a/Lib/lib-old/ni.py b/Lib/lib-old/ni.py
index 4a06f59..074f989 100644
--- a/Lib/lib-old/ni.py
+++ b/Lib/lib-old/ni.py
@@ -163,7 +163,6 @@
 
 
 import imp
-import string
 import sys
 import __builtin__
 
@@ -206,7 +205,7 @@
     def load_dynamic(self, name, stuff):
         file, filename, (suff, mode, type) = stuff
         # Hack around restriction in imp.load_dynamic()
-        i = string.rfind(name, '.')
+        i = name.rfind('.')
         tail = name[i+1:]
         if sys.modules.has_key(tail):
             save = sys.modules[tail]
@@ -241,7 +240,7 @@
     def set_parent(self, m):
         name = m.__name__
         if '.' in name:
-            name = name[:string.rfind(name, '.')]
+            name = name[:name.rfind('.')]
         else:
             name = ''
         m.__ = sys.modules[name]
@@ -250,7 +249,7 @@
         name = package.__name__
         package.__domain__ = domain = [name]
         while '.' in name:
-            name = name[:string.rfind(name, '.')]
+            name = name[:name.rfind('.')]
             domain.append(name)
         if name:
             domain.append('')
@@ -285,7 +284,7 @@
             if not name:
                 return self.finish(package, p, '', fromlist)
             if '.' in name:
-                i = string.find(name, '.')
+                i = name.find('.')
                 name, tail = name[:i], name[i:]
             else:
                 tail = ''
@@ -293,7 +292,7 @@
             m = self.get1(mname)
             return self.finish(package, m, tail, fromlist)
         if '.' in name:
-            i = string.find(name, '.')
+            i = name.find('.')
             name, tail = name[:i], name[i:]
         else:
             tail = ''
@@ -312,7 +311,7 @@
             yname, tail = yname + tail, ''
             m = self.get1(yname)
         while tail:
-            i = string.find(tail, '.', 1)
+            i = tail.find('.', 1)
             if i > 0:
                 head, tail = tail[:i], tail[i:]
             else:
@@ -351,7 +350,7 @@
         if sys.modules.has_key(name):
             return sys.modules[name]
         if '.' in name:
-            i = string.rfind(name, '.')
+            i = name.rfind('.')
             head, tail = name[:i], name[i+1:]
         else:
             head, tail = '', name
@@ -367,7 +366,7 @@
     def reload(self, module):
         name = module.__name__
         if '.' in name:
-            i = string.rfind(name, '.')
+            i = name.rfind('.')
             head, tail = name[:i], name[i+1:]
             path = sys.modules[head].__path__
         else:
diff --git a/Lib/lib-old/packmail.py b/Lib/lib-old/packmail.py
index 2a5aa75..8d247bc 100644
--- a/Lib/lib-old/packmail.py
+++ b/Lib/lib-old/packmail.py
@@ -5,7 +5,6 @@
 
 import os
 from stat import ST_MTIME
-import string
 
 # Print help
 def help():
@@ -103,7 +102,7 @@
 		packtree(outfp, subdirname)
 
 def unixfix(name):
-	comps = string.splitfields(name, os.sep)
+	comps = name.splitfields(os.sep)
 	res = ''
 	for comp in comps:
 		if comp:
diff --git a/Lib/lib-old/tb.py b/Lib/lib-old/tb.py
index abe4824..57851aa 100644
--- a/Lib/lib-old/tb.py
+++ b/Lib/lib-old/tb.py
@@ -5,7 +5,6 @@
 import sys
 import os
 from stat import *
-import string
 import linecache
 
 def br(): browser(sys.last_traceback)
@@ -35,7 +34,7 @@
 		except EOFError:
 			print '\n[EOF]'
 			break
-		cmd = string.strip(line)
+		cmd = line.strip()
 		if cmd:
 			if cmd == 'quit':
 				break
@@ -62,8 +61,8 @@
 	last = lineno
 	first = max(1, last-10)
 	for i in range(first, last+1):
-		if i == lineno: prefix = '***' + string.rjust(`i`, 4) + ':'
-		else: prefix = string.rjust(`i`, 7) + ':'
+		if i == lineno: prefix = '***' + `i`.rjust(4) + ':'
+		else: prefix = `i`.rjust(7) + ':'
 		line = linecache.getline(filename, i)
 		if line[-1:] == '\n': line = line[:-1]
 		print prefix + line
@@ -115,14 +114,14 @@
 	info = '"' + filename + '"(' + `lineno` + ')'
 	line = linecache.getline(filename, lineno)
 	if line:
-		info = info + ': ' + string.strip(line)
+		info = info + ': ' + line.strip()
 	print info
 
 def printsymbols(d):
 	keys = d.keys()
 	keys.sort()
 	for name in keys:
-		print '  ' + string.ljust(name, 12) + ':',
+		print '  ' + name.ljust(12) + ':',
 		printobject(d[name], 4)
 		print
 
diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py
index c4e78a2..da436c1 100644
--- a/Lib/lib-tk/Tkinter.py
+++ b/Lib/lib-tk/Tkinter.py
@@ -37,14 +37,13 @@
 TclError = _tkinter.TclError
 from types import *
 from Tkconstants import *
-import string; _string = string; del string
 try:
     import MacOS; _MacOS = MacOS; del MacOS
 except ImportError:
     _MacOS = None
 
-TkVersion = _string.atof(_tkinter.TK_VERSION)
-TclVersion = _string.atof(_tkinter.TCL_VERSION)
+TkVersion = float(_tkinter.TK_VERSION)
+TclVersion = float(_tkinter.TCL_VERSION)
 
 READABLE = _tkinter.READABLE
 WRITABLE = _tkinter.WRITABLE
@@ -782,7 +781,7 @@
         return t[:1] + tuple(map(self.__winfo_getint, t[1:]))
     def __winfo_getint(self, x):
         """Internal function."""
-        return _string.atoi(x, 0)
+        return int(x, 0)
     def winfo_vrootheight(self):
         """Return the height of the virtual root window associated with this
         widget in pixels. If there is no virtual root window return the
@@ -850,7 +849,7 @@
                    %
                    (add and '+' or '',
                 funcid,
-                _string.join(self._subst_format)))
+                " ".join(self._subst_format)))
             self.tk.call(what + (sequence, cmd))
             return funcid
         elif sequence:
@@ -972,9 +971,8 @@
         if name[0] == '.':
             w = w._root()
             name = name[1:]
-        find = _string.find
         while name:
-            i = find(name, '.')
+            i = name.find('.')
             if i >= 0:
                 name, tail = name[:i], name[i+1:]
             else:
diff --git a/Lib/lib-tk/tkFont.py b/Lib/lib-tk/tkFont.py
index a41e368..169c529 100644
--- a/Lib/lib-tk/tkFont.py
+++ b/Lib/lib-tk/tkFont.py
@@ -18,7 +18,6 @@
 __version__ = "0.9"
 
 import Tkinter
-import string
 
 # weight/slant
 NORMAL = "normal"
@@ -120,7 +119,7 @@
 
     def measure(self, text):
         "Return text width"
-        return string.atoi(self._call("font", "measure", self.name, text))
+        return int(self._call("font", "measure", self.name, text))
 
     def metrics(self, *options):
         """Return font metrics.
@@ -129,14 +128,14 @@
         using this font before calling this method."""
 
         if options:
-            return string.atoi(
+            return int(
                 self._call("font", "metrics", self.name, self._get(options))
                 )
         else:
             res = self._split(self._call("font", "metrics", self.name))
             options = {}
             for i in range(0, len(res), 2):
-                options[res[i][1:]] = string.atoi(res[i+1])
+                options[res[i][1:]] = int(res[i+1])
             return options
 
 def families(root=None):
diff --git a/Lib/lib-tk/tkSimpleDialog.py b/Lib/lib-tk/tkSimpleDialog.py
index 0dc5c84..15ff544 100644
--- a/Lib/lib-tk/tkSimpleDialog.py
+++ b/Lib/lib-tk/tkSimpleDialog.py
@@ -157,8 +157,6 @@
 # --------------------------------------------------------------------
 # convenience dialogues
 
-import string
-
 class _QueryDialog(Dialog):
 
     def __init__(self, title, prompt,
@@ -236,7 +234,7 @@
 class _QueryInteger(_QueryDialog):
     errormessage = "Not an integer."
     def getresult(self):
-        return string.atoi(self.entry.get())
+        return int(self.entry.get())
 
 def askinteger(title, prompt, **kw):
     '''get an integer from the user
@@ -255,7 +253,7 @@
 class _QueryFloat(_QueryDialog):
     errormessage = "Not a floating point value."
     def getresult(self):
-        return string.atof(self.entry.get())
+        return float(self.entry.get())
 
 def askfloat(title, prompt, **kw):
     '''get a float from the user
diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py
index 7c6eb9f..635605d 100644
--- a/Lib/sre_parse.py
+++ b/Lib/sre_parse.py
@@ -10,7 +10,7 @@
 
 # XXX: show string offset and offending character for all errors
 
-import string, sys
+import sys
 
 from sre_constants import *
 
@@ -60,12 +60,6 @@
     "u": SRE_FLAG_UNICODE,
 }
 
-try:
-    int("10", 8)
-    atoi = int
-except TypeError:
-    atoi = string.atoi
-
 class Pattern:
     # master pattern object.  keeps track of global attributes
     def __init__(self):
@@ -222,7 +216,7 @@
 def _group(escape, groups):
     # check if the escape string represents a valid group
     try:
-        gid = atoi(escape[1:])
+        gid = int(escape[1:])
         if gid and gid < groups:
             return gid
     except ValueError:
@@ -245,13 +239,13 @@
             escape = escape[2:]
             if len(escape) != 2:
                 raise error, "bogus escape: %s" % repr("\\" + escape)
-            return LITERAL, atoi(escape, 16) & 0xff
+            return LITERAL, int(escape, 16) & 0xff
         elif str(escape[1:2]) in OCTDIGITS:
             # octal escape (up to three digits)
             while source.next in OCTDIGITS and len(escape) < 5:
                 escape = escape + source.get()
             escape = escape[1:]
-            return LITERAL, atoi(escape, 8) & 0xff
+            return LITERAL, int(escape, 8) & 0xff
         if len(escape) == 2:
             return LITERAL, ord(escape[1])
     except ValueError:
@@ -273,12 +267,12 @@
                 escape = escape + source.get()
             if len(escape) != 4:
                 raise ValueError
-            return LITERAL, atoi(escape[2:], 16) & 0xff
+            return LITERAL, int(escape[2:], 16) & 0xff
         elif escape[1:2] == "0":
             # octal escape
             while source.next in OCTDIGITS and len(escape) < 4:
                 escape = escape + source.get()
-            return LITERAL, atoi(escape[1:], 8) & 0xff
+            return LITERAL, int(escape[1:], 8) & 0xff
         elif escape[1:2] in DIGITS:
             # octal escape *or* decimal group reference (sigh)
             here = source.tell()
@@ -288,7 +282,7 @@
                     source.next in OCTDIGITS):
                     # got three octal digits; this is an octal escape
                     escape = escape + source.get()
-                    return LITERAL, atoi(escape[1:], 8) & 0xff
+                    return LITERAL, int(escape[1:], 8) & 0xff
             # got at least one decimal digit; this is a group reference
             group = _group(escape, state.groups)
             if group:
@@ -462,9 +456,9 @@
                     source.seek(here)
                     continue
                 if lo:
-                    min = atoi(lo)
+                    min = int(lo)
                 if hi:
-                    max = atoi(hi)
+                    max = int(hi)
                 if max < min:
                     raise error, "bad repeat interval"
             else:
@@ -652,7 +646,7 @@
                 if not name:
                     raise error, "bad group name"
                 try:
-                    index = atoi(name)
+                    index = int(name)
                 except ValueError:
                     if not isname(name):
                         raise error, "bad character in group name"
@@ -676,7 +670,7 @@
                         break
                 if not code:
                     this = this[1:]
-                    code = LITERAL, atoi(this[-6:], 8) & 0xff
+                    code = LITERAL, int(this[-6:], 8) & 0xff
                 a(code)
             else:
                 try:
@@ -705,4 +699,4 @@
             if s is None:
                 raise error, "empty group"
             a(s)
-    return string.join(p, sep)
+    return sep.join(p)
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index 60bc6c6..5866d43 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -32,7 +32,6 @@
 """
 
 import sys
-import string
 import os
 import getopt
 import traceback
@@ -106,7 +105,7 @@
         filename = os.path.join(gettempdir(), 'pynexttest')
         try:
             fp = open(filename, 'r')
-            next = string.strip(fp.read())
+            next = fp.read().strip()
             tests = [next]
             fp.close()
         except IOError:
@@ -163,10 +162,10 @@
             print "that passes in verbose mode may fail without it."
     if bad:
         print count(len(bad), "test"), "failed:",
-        print string.join(bad)
+        print " ".join(bad)
     if skipped and not quiet:
         print count(len(skipped), "test"), "skipped:",
-        print string.join(skipped)
+        print " ".join(skipped)
 
     if single:
         alltests = findtests(testdir, stdtests, nottests)
diff --git a/Lib/test/sortperf.py b/Lib/test/sortperf.py
index 34ed338..fd22194 100644
--- a/Lib/test/sortperf.py
+++ b/Lib/test/sortperf.py
@@ -112,16 +112,15 @@
     Extra arguments are used to seed the random generator.
 
     """
-    import string
     # default range (inclusive)
     k1 = 15
     k2 = 19
     if sys.argv[1:]:
         # one argument: single point
-        k1 = k2 = string.atoi(sys.argv[1])
+        k1 = k2 = int(sys.argv[1])
         if sys.argv[2:]:
             # two arguments: specify range
-            k2 = string.atoi(sys.argv[2])
+            k2 = int(sys.argv[2])
             if sys.argv[3:]:
                 # derive random seed from remaining arguments
                 x, y, z = 0, 0, 0
diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py
index 2e912c8..a408ef3 100644
--- a/Lib/test/string_tests.py
+++ b/Lib/test/string_tests.py
@@ -44,8 +44,8 @@
     test('join', BadSeq2(), 'a b c')
 
     # try a few long ones
-    print string.join(['x' * 100] * 100, ':')
-    print string.join(('x' * 100,) * 100, ':')
+    print ":".join(['x' * 100] * 100)
+    print ":".join(('x' * 100,) * 100)
 
 
 def run_method_tests(test):
diff --git a/Lib/test/test_dospath.py b/Lib/test/test_dospath.py
index 08d32da..5b0fee5 100644
--- a/Lib/test/test_dospath.py
+++ b/Lib/test/test_dospath.py
@@ -1,11 +1,10 @@
 import dospath
-import string
 import os
 
 errors = 0
 
 def tester(fn, wantResult):
-    fn = string.replace(fn, "\\", "\\\\")
+    fn = fn.replace("\\", "\\\\")
     gotResult = eval(fn)
     if wantResult != gotResult:
         print "error!"
diff --git a/Lib/test/test_extcall.py b/Lib/test/test_extcall.py
index 10162aa..9e6da62 100644
--- a/Lib/test/test_extcall.py
+++ b/Lib/test/test_extcall.py
@@ -1,6 +1,5 @@
 from test_support import verify, verbose, TestFailed
 from UserList import UserList
-import string
 
 def sortdict(d):
     keys = d.keys()
@@ -195,7 +194,7 @@
                 if vararg: arglist.append('*' + vararg)
                 if kwarg: arglist.append('**' + kwarg)
                 decl = 'def %s(%s): print "ok %s", a, b, d, e, v, k' % (
-                    name, string.join(arglist, ', '), name)
+                    name, ', '.join(arglist), name)
                 exec(decl)
                 func = eval(name)
                 funcs.append(func)
diff --git a/Lib/test/test_imgfile.py b/Lib/test/test_imgfile.py
index 8eb330d..26f6186 100755
--- a/Lib/test/test_imgfile.py
+++ b/Lib/test/test_imgfile.py
@@ -30,7 +30,6 @@
 
     import sys
     import os
-    import string
 
     outputfile = '/tmp/deleteme'
 
@@ -47,9 +46,9 @@
         else: # ...or the full path of the module
             ourname = sys.modules[__name__].__file__
 
-        parts = string.splitfields(ourname, os.sep)
+        parts = ourname.split(os.sep)
         parts[-1] = name
-        name = string.joinfields(parts, os.sep)
+        name = os.sep.joinfields(parts)
         sizes = imgfile.getsizes(name)
     if verbose:
         print 'Opening test image: %s, sizes: %s' % (name, str(sizes))
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py
index 4673913..8066285 100644
--- a/Lib/test/test_mmap.py
+++ b/Lib/test/test_mmap.py
@@ -1,6 +1,6 @@
 from test_support import verify
 import mmap
-import string, os, re, sys
+import os, re, sys
 
 PAGESIZE = mmap.PAGESIZE
 
@@ -21,8 +21,8 @@
     # Simple sanity checks
 
     print type(m)  # SF bug 128713:  segfaulted on Linux
-    print '  Position of foo:', string.find(m, 'foo') / float(PAGESIZE), 'pages'
-    verify(string.find(m, 'foo') == PAGESIZE)
+    print '  Position of foo:', m.find('foo') / float(PAGESIZE), 'pages'
+    verify(m.find('foo') == PAGESIZE)
 
     print '  Length of file:', len(m) / float(PAGESIZE), 'pages'
     verify(len(m) == 2*PAGESIZE)
diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py
index 1b49c03..7867fd9 100644
--- a/Lib/test/test_ntpath.py
+++ b/Lib/test/test_ntpath.py
@@ -1,11 +1,10 @@
 import ntpath
-import string
 import os
 
 errors = 0
 
 def tester(fn, wantResult):
-    fn = string.replace(fn, "\\", "\\\\")
+    fn = fn.replace("\\", "\\\\")
     gotResult = eval(fn)
     if wantResult != gotResult:
         print "error!"
diff --git a/Lib/test/test_pkg.py b/Lib/test/test_pkg.py
index d915e10..f699af40 100644
--- a/Lib/test/test_pkg.py
+++ b/Lib/test/test_pkg.py
@@ -1,6 +1,6 @@
 # Test packages (dotted-name import)
 
-import sys, os, string, tempfile, traceback
+import sys, os, tempfile, traceback
 from os import mkdir, rmdir             # Can't test if these fail
 del mkdir, rmdir
 from test_support import verify, verbose, TestFailed
@@ -10,7 +10,7 @@
 def mkhier(root, descr):
     mkdir(root)
     for name, contents in descr:
-        comps = string.split(name)
+        comps = name.split()
         fullname = root
         for c in comps:
             fullname = os.path.join(fullname, c)