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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Python 中的文件 > 原文: [http://zetcode.com/lang/python/files/](http://zetcode.com/lang/python/files/) 在 Python 編程教程的這一部分中,我們處理文件以及標準輸入和輸出。 我們展示了如何從文件讀取和寫入文件。 我們簡要介紹`pickle`模塊。 Python 中的所有內容都是一個對象。 UNIX 中的所有內容都是文件。 ## Python `open`函數 `open()`函數用于在 Python 中打開文件。 ```py open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None) ``` `file`是要打開的文件的名稱。 `mode`指示如何打開文件:用于讀取,寫入或附加。 `buffering`是用于設置緩沖策略的可選整數。 `encoding`是用于解碼或編碼文件的編碼名稱。 `errors`是一個可選的字符串,它指定如何處理編碼和解碼錯誤。 `newline`控制換行符的行為。 文件模式為: | 模式 | 含義 | | --- | --- | | `'r'` | 讀取(默認) | | `'w'` | 寫入 | | `'a'` | 附加 | | `'b'` | 二進制數據 | | `'+'` | 更新(讀寫) | | `'X'` | 互斥創建,如果文件存在則失敗 | 在以下示例中,我們使用此文本文件。 `works.txt` ```py Lost Illusions Beatrix Honorine The firm of Nucingen Old Goriot Colonel Chabert Cousin Bette ``` ## Python with 語句 處理文件通常會導致錯誤; 因此,我們必須管理可能的異常。 另外,當不再需要文件對象時,必須關閉該文件對象。 `with`語句通過封裝通用的準備和清除任務來簡化異常處理。 它還會自動關閉打開的文件。 `read_width.py` ```py #!/usr/bin/env python # read_width.py with open('works.txt', 'r') as f: contents = f.read() print(contents) ``` 該示例讀取`works.txt`文件的內容。 ```py with open('works.txt', 'r') as f: ``` 通過`open()`函數,我們打開`works.txt`文件進行讀取。 文件對象的別名為`f`。 `with`語句負責處理異常和關閉打開的文件。 ```py contents = f.read() ``` `read()`方法讀取所有內容,直到 EOF。 它將數據作為一個大字符串返回。 ## Python 讀取函數 `read()`函數從文件中讀取指定數量的字節。 如果未指定字節數,它將讀取整個文件。 `read_data.py` ```py #!/usr/bin/env python # read_data.py import sys with open('works.txt', 'r') as f: print(f.read(5)) print(f.read(9)) ``` 該代碼示例從文件中讀取了五個字母,并將它們打印到控制臺。 然后讀取并打印另外九個字母。 第二個操作繼續從第一個操作結束的位置讀取。 ```py $ ./read_data.py Lost Illusions ``` 這是輸出。 ## Python 文件位置 文件位置是我們從中讀取數據的文件位置。 `tell()`方法給出文件中的當前位置,`seek()`方法移動文件中的位置。 `file_positions.py` ```py #!/usr/bin/env python # file_positions.py with open('works.txt', 'r') as f: print(f.read(14)) print(f"The current file position is {f.tell()}") f.seek(0, 0) print(f.read(30)) ``` 在示例中,我們讀取 14 個字節,然后確定并打印當前文件位置。 我們將當前文件位置移到`seek()`的開頭,再讀取 30 個字節。 ```py $ ./file_positions.py Lost Illusions The current file position is 14 Lost Illusions Beatrix Honorin ``` 這是輸出。 ## Python `readline`方法 `readline()`方法從文件讀取一行。 字符串中保留尾隨換行符。 函數到達文件末尾時,將返回一個空字符串。 `readbyline.py` ```py #!/usr/bin/env python # readbyline.py with open('works.txt', 'r') as f: while True: line = f.readline() if not line: break else: print(line.rstrip()) ``` 使用`readline()`方法和`while`循環,我們從文件中讀取了所有行。 ```py while True: ``` 我們開始無止境的循環; 因此,我們稍后必須使用`break`語句跳過循環。 ```py line = f.readline() ``` 從文件中讀取一行。 ```py if not line: break else: print(line.rstrip()) ``` 如果到達 EOF,則調用`break`語句; 否則,我們將該行打印到控制臺,同時在該行的末尾刪除換行符。 在下面的示例中,我們使用一種更方便的方式瀏覽文件的各行。 `read_file.py` ```py #!/usr/bin/env python # read_file.py with open('works.txt', 'r') as f: for line in f: print(line.rstrip()) ``` 在內部,文件對象是迭代器。 我們可以將文件對象傳遞給`for`循環來遍歷它。 ## Python `readlines`方法 `readlines()`方法讀取數據,直到文件結尾,然后返回行列表。 `readlines.py` ```py #!/usr/bin/env python # readlines.py with open('works.txt', 'r') as f: contents = f.readlines() for i in contents: print(i.strip()) ``` `readlines()`方法將文件的所有內容讀入內存。 但是,對于非常大的文件,這可能會出現問題。 ## Python `write`方法 `write()`方法將字符串寫入文件。 `strophe.py` ```py #!/usr/bin/env python # strophe.py text = '''Incompatible, it don't matter though 'cos someone's bound to hear my cry Speak out if you do You're not easy to find\n''' with open('strophe.txt', 'w') as f: f.write(text) ``` 這次我們以`"w"`模式打開文件,以便我們可以對其進行寫入。 如果該文件不存在,則會創建它。 如果存在,它將被覆蓋。 ```py $ cat strophe.txt Incompatible, it don't matter though 'cos someone's bound to hear my cry Speak out if you do You're not easy to find ``` ## Python 標準 I/O 基本的 I/O 連接共有三種:標準輸入,標準輸出和標準錯誤。 標準輸入是進入程序的數據。 標準輸入來自鍵盤。 標準輸出是我們使用 print 關鍵字打印數據的地方。 除非重定向,否則它是終端控制臺。 標準錯誤是程序寫入錯誤消息的流。 通常是文本終端。 Python 中的標準輸入和輸出是`sys`模塊中的對象。 | 對象 | 描述 | | --- | --- | | `sys.stdin` | 標準輸入 | | `sys.stdout` | 標準輸出 | | `sys.stderr` | 標準錯誤 | 符合 UNIX 的哲學,標準 I/O 流是文件對象。 ### Python 標準輸入 標準輸入是進入程序的數據。 `read_name.py` ```py #!/usr/bin/env python # read_name.py import sys print('Enter your name: ', end='') name = '' sys.stdout.flush() while True: c = sys.stdin.read(1) if c == '\n': break name = name + c print('Your name is:', name) ``` `read()`方法從標準輸入讀取一個字符。 在我們的示例中,系統提示您輸入`'Enter your name: '`。 我們輸入名稱,然后按`Enter`。 `Enter`鍵生成`new line`字符:`\n`。 ```py $ ./read_name.py Enter your name: Peter Your name is: Peter ``` 為了獲得輸入,我們可以使用更高級別的函數:`input()`和`raw_input()`。 如果提供了`input()`函數,則會打印提示并讀取輸入。 `input_example.py` ```py #!/usr/bin/env python # input_example.py data = input('Enter value: ') print('You have entered:', data) ``` ```py $ ./input_example.py Enter value: Hello there You have entered: Hello there ``` ### Python 標準輸出 標準輸出是我們打印數據的地方。 `std_output.py` ```py #!/usr/bin/env python # std_output.py import sys sys.stdout.write('Honore de Balzac, Father Goriot\n') sys.stdout.write('Honore de Balzac, Lost Illusions\n') ``` 在示例中,我們將一些文本寫入標準輸出。 在我們的例子中,這是終端控制臺。 我們使用`write()`方法。 ```py $ ./stdout.py Honore de Balzac, Father Goriot Honore de Balzac, Lost Illusions ``` 默認情況下,`print`函數將一些文本放入`sys.stdout`。 `print_fun.py` ```py #!/usr/bin/env python # print_fun.py print('Honore de Balzac') print('The Splendors and Miseries of Courtesans', 'Gobseck', 'Father Goriot', sep=":") vals = [1, 2, 3, 4, 5] for e in vals: print(e, end=' ') print() ``` 在此示例中,我們使用`sep`和`end`參數。 `sep`分隔打印的對象,`end`定義最后打印的內容。 ```py $ ./print_fun.py Honore de Balzac The Splendors and Miseries of Courtesans:Gobseck:Father Goriot 1 2 3 4 5 ``` 這是輸出。 可以使用`print()`函數寫入文件。 `print()`函數包含一個`file`參數,該參數告訴我們在哪里打印數據。 `print2file.py` ```py #!/usr/bin/env python # print2file.py with open('works.txt', 'w') as f: print('Beatrix', file=f) print('Honorine', file=f) print('The firm of Nucingen', file=f) ``` 我們打開一個文件,并在其中寫入巴爾扎克的書的三個書名。 文件對象被賦予`file`參數。 ```py $ cat works.txt Beatrix Honorine The firm of Nucingen ``` ### Python 重定向 標準輸出可以重定向。 在以下示例中,我們將標準輸出重定向到常規文件。 `redirect.py` ```py #!/usr/bin/env python # redirect.py import sys with open('output.txt', 'w') as f: sys.stdout = f print('Lucien') sys.stdout.write('Rastignac\n') sys.stdout.writelines(['Camusot\n', 'Collin\n']) sys.stdout = sys.__stdout__ print('Bianchon') sys.stdout.write('Lambert\n') ``` 在`redirect.py`腳本中,我們將標準輸出重定向到常規文件`output.txt`。 然后,我們恢復原始的標準輸出。 `std.output`的原始值保存在特殊的`sys.__stdout__`變量中。 ```py $ ./redirect.py Bianchon Lambert $ cat output.txt Lucien Rastignac Camusot Collin ``` ## Python `pickle`模塊 到目前為止,我們一直在處理簡單的文本數據。 如果我們使用對象而不是簡單的文本怎么辦? 在這種情況下,我們可以使用`pickle`模塊。 此模塊序列化 Python 對象。 Python 對象將轉換為字節流并寫入文本文件。 此過程稱為酸洗。 從文件讀取并重建對象的逆操作稱為反序列化或解腌。 `pickle_ex.py` ```py #!/usr/bin/env python # pickle_ex.py import pickle class Person: def __init__(self, name, age): self.name = name self.age = age def get_name(self): return self.name def get_age(self): return self.age person = Person('Monica', 15) print(person.get_name()) print(person.get_age()) with open('monica', 'wb') as f: pickle.dump(person, f) with open('monica', 'rb') as f2: monica = pickle.load(f2) print(monica.get_name()) print(monica.get_age()) ``` 在我們的腳本中,我們定義一個`Person`類。 我們創建一個人。 我們使用`dump()`方法腌制對象。 我們關閉文件,再次打開以進行讀取,然后使用`load()`方法解開對象。 ```py $ ./pickle_ex.py Monica 15 Monica 15 ``` 在 Python 教程的這一部分中,我們將處理文件以及 Python 中的標準輸入和輸出。
                  <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>

                              哎呀哎呀视频在线观看