<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] ## 文件初識 ` `使用python來讀寫文件是非常簡單的操作. 我們使用open()函數來打開一個文件, 獲取到文 件句柄. 然后通過文件句柄就可以進行各種各樣的操作了. 根據打開方式的不同能夠執行的操 作也會有相應的差異. 打開文件的方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默認使用的是r(只讀)模式 ## 只讀模式打開文件(r,rb) ``` f = open("在線女郎",mode="r", encoding="utf-8") content = f.read() print(content) f.close() ``` ![](https://img.kancloud.cn/2f/ff/2fff6eb39d45f79c88c3c8534fd673f1_408x136.png) 運行結果 ![](https://img.kancloud.cn/93/5b/935b24ffd5a6971225d30a35c6eccfde_493x119.png) ` `需要注意encoding表示編碼集. 根據文件的實際保存編碼進行獲取數據, 對于我們而言. 更 多的是utf-8. ` `rb. 讀取出來的數據是bytes類型, 在rb模式下. 不能選擇encoding字符集. ~~~ f = open("在線女郎",mode="rb") content = f.read() print(content) f.close() ~~~ ` `運行結果 ``` b'\xe5\x9f\xba\xe5\xb0\xbc\xe6\x8a\x8a\xe8\xaf\xb6\xe6\xaf\x94\n\xe8\x89\xbe\xe6\xac\xa7\xe5\xa5\xa5\xe5\xb0\x94\xe8\x81\x8a\xe5\x90\xa7\n\xe6\x96\xaf\xe5\xa1\x94\xe6\x8a\xa4\xe5\x8f\x91' ``` ` `rb的作用: 在讀取非文本文件的時候. 比如讀取MP3. 圖像. 視頻等信息的時候就需要用到 ` `rb. 因為這種數據是沒辦法直接顯示出來的. 在后面我們文件上傳下載的時候還會用到. 還有. 我們看的直播. 實際上都是這種數據. ``` 1. 絕對路徑:從磁盤根目錄開始一直到文件名. 2. 相對路徑:同一個文件夾下的文件. 相對于當前這個程序所在的文件夾而言. 如果在同 一個文件夾中. 則相對路徑就是這個文件名. 如果在上一層文件夾. 則要../ ``` ***** 讀取文件的方法: 1. read() 將文件中的內容全部讀取出來. 弊端: 占內存. 如果文件過大.容易導致內存崩潰。 2. read(n) 讀取n個字符. 需要注意的是. 如果再次讀取. 那么會在當前位置繼續去讀而不 是從頭讀, 如果使用的是rb模式. 則讀取出來的是n個字節。 3. readline() 一次讀取一行數據, 注意: readline()結尾, 注意每次讀取出來的數據都會有一 個\\n 所以呢. 需要我們使用strip()方法來去掉\\n或者空格。 4. readlines()將每一行形成一個元素, 放到一個列表中. 將所有的內容都讀取出來. 所以 也是. 容易出現內存崩潰的問題.不推薦使用。 ``` f = open("../def/哇擦.txt", mode="r", encoding="utf-8") lst = f.readlines() print(lst) for line in lst: print(line.strip()) ``` 5.循環讀取. 這種方式是組好的. 每次讀取一行內容.不會產生內存溢出的問題. **注意: 讀取完的文件句柄一定要關閉 f.close()** ## 寫模式(w, wb) ` `寫的時候注意. 如果沒有文件. 則會創建文件, 如果文件存在. 則將原件中原來的內容刪除, 再 寫入新內容。 ~~~ f = open("在線女郎", mode="w", encoding="utf-8") f.write("比基尼大波浪") f.flush() # 刷新. 養成好習慣 f.close() ~~~ ![](https://img.kancloud.cn/4b/30/4b307d8f1e11c3032caf3c24337330bf_463x98.png) ` `wb模式下. 可以不指定打開文件的編碼. 但是在寫文件的時候必須將字符串轉化成utf-8的 bytes數據。 ~~~ f = open("在線女郎", mode="wb") f.write("金毛獅王".encode("utf-8")) f.flush() f.close() ~~~ ## 追加模式(a, ab) ` `在追加模式下. 我們寫入的內容會追加在文件的結尾. ~~~ f = open("在線女郎", mode="a", encoding="utf-8") f.write("肖四爺") f.flush() f.close() ~~~ ![](https://img.kancloud.cn/fd/e8/fde8b125fd23c7153111b9548b7cb5a9_494x86.png) ## 讀寫模式(r+, r+b) ` `對于讀寫模式. 必須是先讀. 因為默認光標是在開頭的. 準備讀取的. 當讀完了之后再進行 寫入. 我們以后使用頻率最?的模式就是r+。 ~~~ f = open("在線女郎", mode="r+", encoding="utf-8") content = f.read() f.write("植物精華") print(content) f.flush() f.close() ~~~ ![](https://img.kancloud.cn/31/78/31789f9895844c5886591118f52d6a36_486x115.png) **r+模式下. 必須是先讀取. 然后再寫入** ## 寫讀(w+, w+b) ` `先將所有的內容清空. 然后寫入. 最后讀取. 但是讀取的內容是空的, 不常用。 ~~~ f = open("在線女郎", mode="w+", encoding="utf-8") f.write("哈哈") content = f.read() print(content) f.flush() f.close() ~~~ **w+ 模式下, 一開始讀取不到數據. 然后寫的時候再將原來 的內容清空. 所以, 很少用.** ## 光標位置移動 * seek(n) 光標移動到n位置, 注意, 移動的單位是byte. 所以如果是UTF-8的中文部分要 是3的倍數. 通常我們使用seek都是移動到開頭或者結尾. 移動到開頭:seek(0) 移動到結尾: seek(0,2) seek的第二個參數表示的是從哪個位置進行偏移, 默認是0, 表 示開頭, 1表示當前位置, 2表示結尾。 ``` f = open("小娃娃", mode="r+", encoding="utf-8") f.seek(0) # 光標移動到開頭 content = f.read() # 讀取內容, 此時光標移動到結尾 print(content) f.seek(0) # 再次將光標移動到開頭 f.seek(0, 2) # 將光標移動到結尾 content2 = f.read() # 讀取內容. 什么都沒有 print(content2) f.seek(0) # 移動到開頭 f.write("張國榮") # 寫入信息. 此時光標在9 中文3 * 3個 = 9 f.flush() f.close() ``` * tell() 使用tell()可以幫我們獲取到當前光標在什么位置 ``` f = open("小娃娃", mode="r+", encoding="utf-8") f.seek(0) # 光標移動到開頭 content = f.read() # 讀取內容, 此時光標移動到結尾 print(content) f.seek(0) # 再次將光標移動到開頭 f.seek(0, 2) # 將光標移動到結尾 content2 = f.read() # 讀取內容. 什么都沒有 print(content2) f.seek(0) # 移動到開頭 f.write("張國榮") # 寫入信息. 此時光標在9 中文3 * 3個 = 9 print(f.tell()) # 光標位置9 f.flush() f.close() ``` * truncate() 截斷文件 ``` f = open("小娃娃", mode="w", encoding="utf-8") f.write("哈哈") # 寫入兩個字符 f.seek(3) # 光標移動到3, 也就是兩個字中間 f.truncate() # 刪掉光標后面的所有內容 f.close() f = open("小娃娃", mode="r+", encoding="utf-8") content = f.read(3) # 讀取12個字符 f.seek(4) print(f.tell()) f.truncate() # 后面的所有內容全部都刪掉 # print(content) f.flush() f.close() ```
                  <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>

                              哎呀哎呀视频在线观看