diff --git a/Doc/tools/sgmlconv/esis2sgml.py b/Doc/tools/sgmlconv/esis2sgml.py
index 7bda929..458a074 100755
--- a/Doc/tools/sgmlconv/esis2sgml.py
+++ b/Doc/tools/sgmlconv/esis2sgml.py
@@ -97,7 +97,7 @@
             data = esistools.decode(data)
             data = escape(data)
             if not inverbatim:
-                data = string.replace(data, "---", "&mdash;")
+                data = data.replace("---", "&mdash;")
             ofp.write(data)
             if "\n" in data:
                 lastopened = None
@@ -139,7 +139,7 @@
             lastempty = 0
             inverbatim = 0
         elif type == "A":
-            name, type, value = string.split(data, " ", 2)
+            name, type, value = data.split(" ", 2)
             name = map_gi(name, _attr_map)
             attrs[name] = esistools.decode(value)
         elif type == "e":
@@ -165,7 +165,7 @@
             line = fp.readline()
             if not line:
                 break
-            gi = string.strip(line)
+            gi = line.strip()
             if gi:
                 d[gi] = gi
     fp = open(EMPTIES_FILENAME, "w")
@@ -177,9 +177,9 @@
 
 
 def update_gi_map(map, names, fromsgml=1):
-    for name in string.split(names, ","):
+    for name in names.split(","):
         if fromsgml:
-            uncased = string.lower(name)
+            uncased = name.lower()
         else:
             uncased = name
         map[uncased] = name
@@ -211,7 +211,7 @@
         elif opt in ("-x", "--xml"):
             xml = 1
         elif opt in ("-a", "--autoclose"):
-            autoclose = string.split(arg, ",")
+            autoclose = arg.split(",")
         elif opt == "--elements-map":
             elem_names = ("%s,%s" % (elem_names, arg))[1:]
         elif opt == "--attributes-map":
@@ -241,9 +241,9 @@
         # stream but set up conversion tables to get the case right on output
         global _normalize_case
         _normalize_case = string.lower
-        update_gi_map(_elem_map, string.split(elem_names, ","))
-        update_gi_map(_attr_map, string.split(attr_names, ","))
-        update_gi_map(_values_map, string.split(value_names, ","))
+        update_gi_map(_elem_map, elem_names.split(","))
+        update_gi_map(_attr_map, attr_names.split(","))
+        update_gi_map(_values_map, value_names.split(","))
     else:
         global map_gi
         map_gi = null_map_gi
diff --git a/Doc/tools/sgmlconv/esistools.py b/Doc/tools/sgmlconv/esistools.py
index 7feeada..6c7c0ae 100644
--- a/Doc/tools/sgmlconv/esistools.py
+++ b/Doc/tools/sgmlconv/esistools.py
@@ -1,7 +1,6 @@
 """Miscellaneous utility functions useful for dealing with ESIS streams."""
 
 import re
-import string
 
 import xml.dom.pulldom
 
@@ -182,7 +181,7 @@
         elif token == '?':
             if handler:
                 if ' ' in data:
-                    target, data = string.split(data, None, 1)
+                    target, data = data.split(None, 1)
                 else:
                     target, data = data, ""
                 handler.processingInstruction(target, decode(data))
diff --git a/Doc/tools/sgmlconv/latex2esis.py b/Doc/tools/sgmlconv/latex2esis.py
index c33c4d5..32115a8 100755
--- a/Doc/tools/sgmlconv/latex2esis.py
+++ b/Doc/tools/sgmlconv/latex2esis.py
@@ -109,7 +109,7 @@
         self.write = ofp.write
         self.ofp = ofp
         self.table = table
-        self.line = string.join(map(string.rstrip, ifp.readlines()), "\n")
+        self.line = string.join([s.rstrip() for s in ifp.readlines()], "\n")
         self.preamble = 1
 
     def convert(self):
@@ -170,7 +170,7 @@
                 entry = self.get_entry(macroname)
                 if entry.verbatim:
                     # magic case!
-                    pos = string.find(line, "\\end{%s}" % macroname)
+                    pos = line.find("\\end{%s}" % macroname)
                     text = line[m.end(1):pos]
                     stack.append(entry.name)
                     self.write("(%s\n" % entry.outputname)
@@ -410,7 +410,7 @@
 
 def skip_white(line):
     while line and line[0] in " %\n\t\r":
-        line = string.lstrip(line[1:])
+        line = line[1:].lstrip()
     return line
 
 
@@ -461,14 +461,14 @@
         self.__current.verbatim = attrs.get("verbatim") == "yes"
         if attrs.has_key("outputname"):
             self.__current.outputname = attrs.get("outputname")
-        self.__current.endcloses = string.split(attrs.get("endcloses", ""))
+        self.__current.endcloses = attrs.get("endcloses", "").split()
     def end_environment(self):
         self.end_macro()
 
     def start_macro(self, attrs):
         name = attrs["name"]
         self.__current = TableEntry(name)
-        self.__current.closes = string.split(attrs.get("closes", ""))
+        self.__current.closes = attrs.get("closes", "").split()
         if attrs.has_key("outputname"):
             self.__current.outputname = attrs.get("outputname")
     def end_macro(self):
