Remove uses of the string and types modules:

x in string.whitespace => x.isspace()
type(x) in types.StringTypes => isinstance(x, basestring)
isinstance(x, types.StringTypes) => isinstance(x, basestring)
type(x) is types.StringType => isinstance(x, str)
type(x) == types.StringType => isinstance(x, str)
string.split(x, ...) => x.split(...)
string.join(x, y) => y.join(x)
string.zfill(x, ...) => x.zfill(...)
string.count(x, ...) => x.count(...)
hasattr(types, "UnicodeType") => try: unicode except NameError:
type(x) != types.TupleTuple => not isinstance(x, tuple)
isinstance(x, types.TupleType) => isinstance(x, tuple)
type(x) is types.IntType => isinstance(x, int)

Do not mention the string module in the rlcompleter docstring.

This partially applies SF patch http://www.python.org/sf/562373
(with basestring instead of string). (It excludes the changes to
unittest.py and does not change the os.stat stuff.)
diff --git a/Lib/markupbase.py b/Lib/markupbase.py
index ae19869..acd0726 100644
--- a/Lib/markupbase.py
+++ b/Lib/markupbase.py
@@ -1,7 +1,6 @@
 """Shared support for scanning document type declarations in HTML and XHTML."""
 
 import re
-import string
 
 _declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9]*\s*').match
 _declstringlit_match = re.compile(r'(\'[^\']*\'|"[^"]*")\s*').match
@@ -151,7 +150,7 @@
                     j = j + 1
             elif c == "]":
                 j = j + 1
-                while j < n and rawdata[j] in string.whitespace:
+                while j < n and rawdata[j].isspace():
                     j = j + 1
                 if j < n:
                     if rawdata[j] == ">":
@@ -160,7 +159,7 @@
                     self.error("unexpected char after internal subset")
                 else:
                     return -1
-            elif c in string.whitespace:
+            elif c.isspace():
                 j = j + 1
             else:
                 self.updatepos(declstartpos, j)
@@ -203,7 +202,7 @@
                     j = rawdata.find(")", j) + 1
                 else:
                     return -1
-                while rawdata[j:j+1] in string.whitespace:
+                while rawdata[j:j+1].isspace():
                     j = j + 1
                 if not rawdata[j:]:
                     # end of buffer, incomplete
@@ -268,7 +267,7 @@
                 c = rawdata[j:j+1]
                 if not c:
                     return -1
-                if c in string.whitespace:
+                if c.isspace():
                     j = j + 1
                 else:
                     break