Index: /hodgestar/Talks/PythonForProgrammers/slides/py4prog.py
===================================================================
--- /hodgestar/Talks/PythonForProgrammers/slides/py4prog.py (revision 726)
+++ /hodgestar/Talks/PythonForProgrammers/slides/py4prog.py (revision 727)
@@ -84,5 +84,5 @@
 
     Slide("Course Structure",
-        Bullet("First Script:", PYCODE('''
+        Bullet("First Script:", PYCODE(r'''
             #!/usr/bin/env python
 
@@ -111,5 +111,5 @@
 
     Slide("Numeric and Sequence Types",
-        Bullet("Numeric types:", PYCON('''
+        Bullet("Numeric types:", PYCON(r'''
             >>> 5, 12345678901234567890123
             (5, 12345678901234567890123L)
@@ -135,4 +135,28 @@
     ),
 
+    Slide("File Handling and Iterables",
+        Bullet("text2.py:", PYCODE(r'''
+            def main(args):
+                prog = args[0]
+                filenames = args[1:]
+
+                for filename in filenames:
+                    f = open(filename, "rb")
+
+                    try:
+                        for line in sorted(f):
+                            print line,
+                    finally:
+                        f.close()
+
+                    with open(filename, "rb") as f:
+                        for i, line in enumerate(sorted(f)):
+                            print "%3d: %s" % (i, line),
+
+                    with open(filename, "rU") as f:
+                        print f.read().replace("\n", r" \\ ")
+            ''')),
+    ),
+
 )
 
Index: /hodgestar/Talks/PythonForProgrammers/html/py4progs-0.html
===================================================================
--- /hodgestar/Talks/PythonForProgrammers/html/py4progs-0.html (revision 726)
+++ /hodgestar/Talks/PythonForProgrammers/html/py4progs-0.html (revision 727)
@@ -11,4 +11,5 @@
 <li><a href='py4progs-2.html'>Course Structure</a></li>
 <li><a href='py4progs-3.html'>Numeric and Sequence Types</a></li>
+<li><a href='py4progs-4.html'>File Handling and Iterables</a></li>
 </ol>
 <br /></body></html>
Index: /hodgestar/Talks/PythonForProgrammers/html/py4progs-3.html
===================================================================
--- /hodgestar/Talks/PythonForProgrammers/html/py4progs-3.html (revision 726)
+++ /hodgestar/Talks/PythonForProgrammers/html/py4progs-3.html (revision 727)
@@ -33,3 +33,3 @@
 <li>IPython is awesome.</li>
 </ul>
-</div><br /><div class="footer"><hr /><div style="float: left; font-style: italic;">Python 4 Programmers</div><div style="float: right;"><a accesskey="P" href="py4progs-2.html">Prev</a> | <a accesskey="I" href="py4progs-0.html">Index</a> | Next</div></div></body></html>
+</div><br /><div class="footer"><hr /><div style="float: left; font-style: italic;">Python 4 Programmers</div><div style="float: right;"><a accesskey="P" href="py4progs-2.html">Prev</a> | <a accesskey="I" href="py4progs-0.html">Index</a> | <a accesskey="N" href="py4progs-4.html">Next</a></div></div></body></html>
Index: /hodgestar/Talks/PythonForProgrammers/html/py4progs-4.html
===================================================================
--- /hodgestar/Talks/PythonForProgrammers/html/py4progs-4.html (revision 726)
+++ /hodgestar/Talks/PythonForProgrammers/html/py4progs-4.html (revision 727)
@@ -6,30 +6,26 @@
 </head>
 <body>
-<div style='margin: auto; width: 50%;'><h2>Strings</h2><ul>
-<li>Examples:<div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">x</span> <span class="o">=</span> <span class="nb">chr</span><span class="p">(</span><span class="mf">13</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">y</span> <span class="o">=</span> <span class="nb">chr</span><span class="p">(</span><span class="mf">13</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="nb">id</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="nb">id</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
-<span class="go">(3082874688L, 3082874688L)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span> <span class="o">=</span> <span class="nb">chr</span><span class="p">(</span><span class="mf">13</span><span class="p">)</span> <span class="o">+</span> <span class="nb">chr</span><span class="p">(</span><span class="mf">14</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">y</span> <span class="o">=</span> <span class="nb">chr</span><span class="p">(</span><span class="mf">13</span><span class="p">)</span> <span class="o">+</span> <span class="nb">chr</span><span class="p">(</span><span class="mf">14</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="nb">id</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="nb">id</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
-<span class="go">(3077159616L, 3077159584L)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span> <span class="o">=</span> <span class="s">&quot;a&quot;</span><span class="o">*</span><span class="mf">20</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">y</span> <span class="o">=</span> <span class="s">&quot;a&quot;</span><span class="o">*</span><span class="mf">20</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">z</span> <span class="o">=</span> <span class="s">&quot;a&quot;</span><span class="o">*</span><span class="mf">21</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">w</span> <span class="o">=</span> <span class="s">&quot;a&quot;</span><span class="o">*</span><span class="mf">21</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="nb">id</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="nb">id</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="nb">id</span><span class="p">(</span><span class="n">z</span><span class="p">),</span> <span class="nb">id</span><span class="p">(</span><span class="n">w</span><span class="p">)</span>
-<span class="go">(3079663488L, 3079663488L, 3079721328L, 3079721568L)</span>
+<div style='margin: auto; width: 50%;'><h2>File Handling and Iterables</h2><ul>
+<li>text2.py:<div class="highlight"><pre><span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
+    <span class="n">prog</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mf">0</span><span class="p">]</span>
+    <span class="n">filenames</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mf">1</span><span class="p">:]</span>
+
+    <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">filenames</span><span class="p">:</span>
+        <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s">&quot;rb&quot;</span><span class="p">)</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sorted</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
+                <span class="k">print</span> <span class="n">line</span><span class="p">,</span>
+        <span class="k">finally</span><span class="p">:</span>
+            <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s">&quot;rb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
+            <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">sorted</span><span class="p">(</span><span class="n">f</span><span class="p">)):</span>
+                <span class="k">print</span> <span class="s">&quot;</span><span class="si">%3d</span><span class="s">: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">line</span><span class="p">),</span>
+
+        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s">&quot;rU&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
+            <span class="k">print</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="s">r&quot; </span><span class="se">\\</span><span class="s"> &quot;</span><span class="p">)</span>
 </pre></div>
 </li>
-
-<li>Single characters and empty string held in permament cache (Objects/stringobject.c).</li>
-
-<li>Constants strings of size &lt;= 20 interned by parser.</li>
-
-<li>PyString_InternInPlace (PyUnicode_InternInPlace in 3.0) results in strings being stored in internal dictionary.<ul><li>Reference in interned not counted in reference count (nasty hack to hide this from users).</li>
-</ul></li>
-
-<li>Strings are replaced by Unicode in 3.0</li>
 </ul>
-</div><br /><div class="footer"><hr /><div style="float: left; font-style: italic;">Python 4 Programmers</div><div style="float: right;"><a accesskey="P" href="py4progs-3.html">Prev</a> | <a accesskey="I" href="py4progs-0.html">Index</a> | <a accesskey="N" href="py4progs-5.html">Next</a></div></div></body></html>
+</div><br /><div class="footer"><hr /><div style="float: left; font-style: italic;">Python 4 Programmers</div><div style="float: right;"><a accesskey="P" href="py4progs-3.html">Prev</a> | <a accesskey="I" href="py4progs-0.html">Index</a> | Next</div></div></body></html>
Index: /hodgestar/Talks/PythonForProgrammers/example/data/simple1.txt
===================================================================
--- /hodgestar/Talks/PythonForProgrammers/example/data/simple1.txt (revision 727)
+++ /hodgestar/Talks/PythonForProgrammers/example/data/simple1.txt (revision 727)
@@ -0,0 +1,5 @@
+c
+d
+a
+f1
+g
Index: /hodgestar/Talks/PythonForProgrammers/example/text2.py
===================================================================
--- /hodgestar/Talks/PythonForProgrammers/example/text2.py (revision 727)
+++ /hodgestar/Talks/PythonForProgrammers/example/text2.py (revision 727)
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+
+"""A Python script that re-implements some of the standard Unix text utils."""
+
+def main(args):
+    prog = args[0]
+    filenames = args[1:]
+
+    for filename in filenames:
+        f = open(filename, "rb")
+
+        try:
+            for line in sorted(f):
+                print line,
+        finally:
+            f.close()
+
+        with open(filename, "rb") as f:
+            for i, line in enumerate(sorted(f)):
+                print "%3d: %s" % (i, line),
+
+        with open(filename, "rU") as f:
+            print f.read().replace("\n", r" \\ ")
+
+if __name__ == "__main__":
+    import sys
+    ret = main(sys.argv)
+    sys.exit(ret)
