⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 node9.html

📁 同样是来自国外的经典python教材
💻 HTML
📖 第 1 页 / 共 2 页
字号:
            <p> <tt class="function">open()</tt> 这个函式会传回一个file物件。通常其用法是传入两个参数如: "<tt class="samp">open(<var>filename</var>, <var>mode</var>)</tt>".  </p>            <p> </p>            <dl>            <dd><pre class="verbatim">&gt;&gt;&gt; f=open('/tmp/workfile', 'w')<br>&gt;&gt;&gt; print f<br>&lt;open file '/tmp/workfile', mode 'w' at 80a0960&gt;<br></pre>              </dd>              </dl>                <p> 第一个参数是一个包含档案名称的字串,第二个参数是另外一个字串,其内容是一些用来描述你要怎么使用这个档案的字元。 <var>mode</var> 可以是 <code>'r'</code> ,如果你想要这个档为唯读的话,也可以使用 <code>'w'</code> 如果你只想要写入的话(如果该档本来就存在的话,你会杀掉原来的档案),你也可以用  <code>'a'</code> 表示你要在档案的尾端加入东西,  <code>'r+'</code> 则会让这个档可以读也可以写。你也可以不传入第二个参数,如果没有传入 <var>mode</var> 参数的话,会使用预设的 <code>'r'</code> 模式。   </p>              <p> 在Windows以及Macintosh系统上,你可以在mode里面加入 <code>'b'</code> 表示要以二元模式(binarymode)开启这个档案,所以你也可以使用  <code>'rb'</code>, <code>'wb'</code>, 以及   <code>'r+b'</code> 。在Windows里面文字档及二元档是有区别的,在文字档里面行终止字元(end-of-line)在档案的读写时是自动会被稍稍修改的。这个自动修改的动作对于一般的ASCII文字档没有什么影响,但是会使得像是JPEGs 或是  <span class="file">.EXE</span> 之类的二元档被损害。所以当你在处理这些档案时特别注意要使用二元的模式。(值得注意的是,在Macintosh里面文字模式的精确的语意是会随着其背后所用的C程式库而有不同的。)  </p>              <p>  </p>              <h2> <br> 7.2.1 File物件的Methods(方法)   </h2>                <p> 底下的例子都假设你已经建立了一个叫做 <code>f</code> 的file物件。  </p>              <p> 如果你想读一个档案的内容你需要呼叫 <code>f.read(<var>size</var>)</code>这个方法(method)。这个method会读入某个数量的资料,然后将资料以字串的形式传回。你也可以不传入 <var>size</var> 这个数值参数,如果你没有传入或是传入负值的话,就会将整个档案都传回。如果你的档案比你的记忆体的两倍还大的话,这是你自己要处理的问题。其他的情况下,都会读入并传回最多是 <var>size</var> 数量的位元组(byte)的资料。如果已经到了档案的最尾端你还呼叫 <code>f.read()</code> 的话,回传值就会是一个空字串(<code>""</code>) 。  </p>              <dl>              <dd><pre class="verbatim">&gt;&gt;&gt; f.read()<br>'This is the entire file.\012'<br>&gt;&gt;&gt; f.read()<br>''<br></pre>                </dd>                </dl>                  <p> <code>f.readline()</code> 会一次只读入一行,换行符号 (<code>\n</code>) 仍然会被留在字串的最尾端,并且当档案不是以换行符号结束时,最后一行的换行符号就会被忽略。这会使得传回的结果不至于有混淆,当传回值是空字串时,我们可以很有信心这已经是档案的最尾端,因为空白的行还是会有                <code>'\n'</code> 单独存在的。   </p>                <p> </p>                <dl>                <dd><pre class="verbatim">&gt;&gt;&gt; f.readline()<br>'This is the first line of the file.\012'<br>&gt;&gt;&gt; f.readline()<br>'Second line of the file\012'<br>&gt;&gt;&gt; f.readline()<br>''<br></pre>                  </dd>                  </dl>                    <p> <code>f.readlines()</code> 会传回一个 list ,其内容是所有在档案内的各个行的资料。如果你传入第二个可有可无的                  <var>sizehint</var> 参数时,会从档案内读入这个参数所代表的byte数目,并且把最后所在的那一整行也一并读完。这一个方法通常用在一行一行的读很大档案时,如此可以增进读的效率,并避免在记忆体中放置大量的资料。只有完整的行才会被传回来。  </p>                  <p> </p>                  <dl>                  <dd><pre class="verbatim">&gt;&gt;&gt; f.readlines()<br>['This is the first line of the file.\012', 'Second line of the file\012']<br></pre>                    </dd>                    </dl>                      <p> <code>f.write(<var>string</var>)</code> 会在档案内写入字串参数                    <var>string</var> 所代表的内容,其传回值是 <code>None</code> 。  </p>                    <p> </p>                    <dl>                    <dd><pre class="verbatim">&gt;&gt;&gt; f.write('This is a test\n')<br></pre>                      </dd>                      </dl>                        <p> <code>f.tell()</code> 会传回一个整数,代表目前这个file物件在这个档案内的所在位置,其单元是从档案开始处有多少个byte。你可以用"<tt class="samp">f.seek(<var>offset</var>, <var>from_what</var>)</tt>" 来改变file物件的所在位置,                      <var>from_what</var> 参数代表从哪里算起,0代表档案的最开头,1代表目前位置,2代表档案的结尾处。呼叫这个函式file物件会跳到从 <var>from_what</var> 参数代表的位置算起  <var>offset</var> 个byte的距离的地方。如果   <var>from_what</var> 没有传入的话,会使用预设的 0,代表从档案的最开头算起。   </p>                      <p> </p>                      <dl>                      <dd><pre class="verbatim">&gt;&gt;&gt; f=open('/tmp/workfile', 'r+')<br>&gt;&gt;&gt; f.write('0123456789abcdef')<br>&gt;&gt;&gt; f.seek(5)     # Go to the 5th byte in the file<br>&gt;&gt;&gt; f.read(1)        <br>'5'<br>&gt;&gt;&gt; f.seek(-3, 2) # Go to the 3rd byte before the end<br>&gt;&gt;&gt; f.read(1)<br>'d'<br></pre>                        </dd>                        </dl>                          <p> 当你已经使用完毕这个file物件时,要记得呼叫 <code>f.close()</code> 把所有因为开档所使用的系统资源都释放掉。一但你呼叫了  <code>f.close()</code> 之后,任何的对file物件的动作都会自动的失败。  </p>                        <p> </p>                        <dl>                        <dd><pre class="verbatim">&gt;&gt;&gt; f.close()<br>&gt;&gt;&gt; f.read()<br>Traceback (innermost last):<br>  File "&lt;stdin&gt;", line 1, in ?<br>ValueError: I/O operation on closed file<br></pre>                          </dd>                          </dl>                            <p> File 物件有一些其他的method可以用,例如  <tt class="method">isatty()</tt> 以及  <tt class="method">truncate()</tt> ,这些比较少用的method可以参考在程式库参考手册里面有关file物件的说明。  </p>                          <p>  </p>                          <h2> <br> 7.2.2 <tt class="module">pickle</tt> Module(模组)   </h2>                             <p> 从档案写入及读出字串资料都没有太大问题,但是数值资料则会比较麻烦。因为 <tt class="method">read()</tt> 这个method 只传回字串,你还得要将这个字串传给类似  <tt class="function">string.atoi()</tt> 这样的函式来将代表数值的字串 <code>'123'</code> 转成数值123。如果你要在档案内储存较复杂的资料型态例如lists、dictionaries、或是某个类别的物件时,那就更加复杂了。  </p>                          <p> 为使使用者不需要自己写程式来处理储存这些复杂的资料型态,Python提供了一个标准的module叫做 <tt class="module">pickle</tt> 。这个令人惊讶的module可以处理几乎所有的Python物件(甚至是某些形式的Python程式码!),并将之转换成一个字串的表现方式。这个过程也叫做                          <i class="dfn">pickling</i>.   R。从这个字串重新组合成我们所要的物件的过程则叫做 <i class="dfn">unpickling</i> 。在这两个过程之间,我们可以将这个代表物件的字串储存成档案或资料,或是在网路上传给另一台机器。  </p>                          <p> 如果你有一个 <code>x</code> 物件及一个可以写入的file物件 <code>f</code> ,要pickle一个物件最简单的方式只要一行程式就可以了:   </p>                          <p> </p>                          <dl>                          <dd><pre class="verbatim">pickle.dump(x, f)<br></pre>                            </dd>                            </dl>                              <p> 如果file物件 <code>f</code> 是可读的话,要unpickle这个物件只要这样做:  </p>                            <p> </p>                            <dl>                            <dd><pre class="verbatim">x = pickle.load(f)<br></pre>                              </dd>                              </dl>                                <p> (这个module还有其他的用法可以pickling多个物件,或是你不想将这个pickled的资料写入档案。请参考在程式库参考手册内有关                              <tt class="module">pickle</tt> 完整的说明。)   </p>                              <p> <tt class="module">pickle</tt> 也是一个标准的方法,可以将Python的物件储存起来给其他程式语言使用,或是等待下一次启动Python再用。技术上来说这叫做 <i class="dfn">persistent</i> 的物件。因为  <tt class="module">pickle</tt> 的运用如此广泛,许多的程式设计师专门写一些Python的延伸功能来处理诸如matrices这些新资料型态的pickle以及 unpickle的过程。   </p>                              <p>  </p>                              <div class="navigation">                              <table align="Center" width="100%" cellpadding="0" cellspacing="2"> <tbody>                                  <tr> <td><a href="node8.html"><img src="../icons/previous.gif" border="0" height="32" alt="Previous Page" width="32"></a></td> <td><a href="tut.html"><img src="../icons/up.gif" border="0" height="32" alt="Up One Level" width="32"></a></td> <td><a href="node10.html"><img src="../icons/next.gif" border="0" height="32" alt="Next Page" width="32"></a></td> <td align="Center" width="100%">Python 教学文件</td> <td><a href="node2.html"><img src="../icons/contents.gif" border="0" height="32" alt="Contents" width="32"></a></td> <td><img src="../icons/blank.gif" border="0" height="32" alt="" width="32"></td> <td><img src="../icons/blank.gif" border="0" height="32" alt="" width="32"></td> </tr>                                </tbody>                              </table> <b class="navlabel">Previous:</b> <a class="sectref" href="node8.html">6.模组</a> <b class="navlabel">Up:</b> <a class="sectref" href="tut.html">Python教学文件</a> <b class="navlabel">Next:</b> <a class="sectref" href="node10.html">8. 程式错误与例外(Exceptions)情形</a> <br>                              <hr></div> <!--End of Navigation Panel-->                               <address> </address>                              <hr>请看<i><a href="about.html">关于此文件&hellip;</a></i> 里面有关如何给我们建议的说明。                                </body>                              </html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -