<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # open函數 # `open`函數 [open](http://docs.python.org/dev/library/functions.html#open) 函數可以打開一個文件。超級簡單吧?大多數時候,我們看到它這樣被使用: ~~~ f = open('photo.jpg', 'r+') jpgdata = f.read() f.close() ~~~ 我現在寫這篇文章的原因,是大部分時間我看到`open`被這樣使用。有**三個**錯誤存在于上面的代碼中。你能把它們全指出來嗎?如不能,請讀下去。在這篇文章的結尾,你會知道上面的代碼錯在哪里,而且,更重要的是,你能在自己的代碼里避免這些錯誤。現在我們從基礎開始: `open`的返回值是一個文件句柄,從操作系統托付給你的Python程序。一旦你處理完文件,你會想要歸還這個文件句柄,只有這樣你的程序不會超出一次能打開的文件句柄的數量上限。 顯式地調用`close`關閉了這個文件句柄,但前提是只有在read成功的情況下。如果有任意異常正好在`f = open(...)`之后產生,`f.close()`將不會被調用(取決于Python解釋器的做法,文件句柄可能還是會被歸還,但那是另外的話題了)。為了確保不管異常是否觸發,文件都能關閉,我們將其包裹成一個`with`語句: ~~~ with open('photo.jpg', 'r+') as f: jpgdata = f.read() ~~~ `open`的第一個參數是文件名。第二個(`mode` 打開模式)決定了這個文件如何被打開。 - 如果你想讀取文件,傳入`r` - 如果你想讀取并寫入文件,傳入`r+` - 如果你想覆蓋寫入文件,傳入`w` - 如果你想在文件末尾附加內容,傳入`a` 雖然有若干個其他的有效的`mode`字符串,但有可能你將永遠不會使用它們。`mode`很重要,不僅因為它改變了行為,而且它可能導致權限錯誤。舉個例子,我們要是在一個寫保護的目錄里打開一個jpg文件, `open(.., 'r+')`就失敗了。`mode`可能包含一個擴展字符;讓我們還可以以二進制方式打開文件(你將得到字節串)或者文本模式(字符串) 一般來說,如果文件格式是由人寫的,那么它更可能是文本模式。jpg圖像文件一般不是人寫的(而且其實不是人直接可讀的),因此你應該以二進制模式來打開它們,方法是在`mode`字符串后加一個`b`(你可以看看開頭的例子里,正確的方式應該是`rb`)。 如果你以文本模式打開一些東西(比如,加一個`t`,或者就用`r/r+/w/a`),你還必須知道要使用哪種編碼。對于計算機來說,所有的問題件都是字節,而不是字符。 可惜,在Pyhon 2.x版本里,`open`不支持顯示地指定編碼。然而,[io.open](http://docs.python.org/2/library/io.html#io.open)函數在Python 2.x中和3.x(其中它是`open`的別名)中都有提供,它能做正確的事。你可以傳入`encoding`這個關鍵字參數來傳入編碼。 如果你不傳入任意編碼,一個系統 - 以及Python -指定的默認選項將被選中。你也許被誘惑去依賴這個默認選項,但這個默認選項經常是錯誤的,或者默認編碼實際上不能表達文件里的所有字符(這將經常發生在Python 2.x和/或Windows)。 所以去挑選一個編碼吧。`utf-8`是一個非常好的編碼。當你寫入一個文件,你可以選一個你喜歡的編碼(或者最終讀你文件的程序所喜歡的編碼)。 那你怎么找出正在讀的文件是用哪種編碼寫的呢?好吧,不幸的是,并沒有一個十分簡單的方式來檢測編碼。在不同的編碼中,同樣的字節可以表示不同,但同樣有效的字符。因此,你必須依賴一個元數據(比如,在HTTP頭信息里)來找出編碼。越來越多的是,文件格式將編碼定義成`UTF-8`。 有了這些基礎知識,我們來寫一個程序,讀取一個文件,檢測它是否是JPG(提示:這些文件頭部以字節`FF D8`開始),把對輸入文件的描述寫入一個文本文件。 ~~~ import io with open('photo.jpg', 'rb') as inf: jpgdata = inf.read() if jpgdata.startswith(b'\xff\xd8'): text = u'This is a JPEG file (%d bytes long)\n' else: text = u'This is a random file (%d bytes long)\n' with io.open('summary.txt', 'w', encoding='utf-8') as outf: outf.write(text % len(jpgdata)) ~~~ 我敢肯定,現在你會正確地使用`open`啦!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看