<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 `pathlib`教程 > 原文: [http://zetcode.com/python/pathlib/](http://zetcode.com/python/pathlib/) Python `pathlib`教程展示了如何通過`pathlib`模塊使用 Python 中的文件和目錄。 `pathlib`是一個 Python 模塊,提供用于處理文件和目錄的對象 API。 `pathlib`是標準模塊。 `Path`是使用文件的核心對象。 ```py $ pip install prettytable $ pip install more_itertools ``` 在本教程中,我們還將使用`prettytable`和`more_itertools`。 `words.txt` ```py blue forest sky ocean rabbit clue ``` 一些示例使用此簡單的文本文件。 ## `Path.cwd`和`home` 我們通過`cwd()`獲得當前工作目錄,并通過`home()`獲得主目錄。 `cwd_home.py` ```py #!/usr/bin/env python from pathlib import Path print(f"Current directory: {Path.cwd()}") print(f"Home directory: {Path.home()}") ``` 該示例打印當前的工作主管和主目錄。 ```py $ cwd_home.py Current directory: C:\Users\Jano\Documents\pyprogs\pathlib Home directory: C:\Users\Jano ``` 這是一個示例輸出。 ## 變更目錄 我們使用`os'` `chdir()`進入另一個目錄。 `change_dir.py` ```py #!/usr/bin/env python from pathlib import Path from os import chdir path = Path('..') print(f'Current working directory: {path.cwd()}') chdir(path) print(f'Current working directory: {path.cwd()}') chdir('..') ``` 我們更改當前的工作目錄。 請注意,僅在 Python 程序內部更改目錄。 ```py $ change_dir.py Current working directory: C:\Users\Jano\Documents\pyprogs\pathlib Current working directory: C:\Users\Jano\Documents\pyprogs ``` 這是一個示例輸出。 ## `Path.mkdir` 使用`mkdir()`創建一個新目錄。 `mkdir.py` ```py #!/usr/bin/env python from pathlib import Path path = Path.cwd() / 'new' path.mkdir() ``` 該示例在當前工作目錄內創建一個新目錄。 ## 復制文件 借助`shutil`模塊,我們復制了一個文件。 `copy_file.py` ```py #!/usr/bin/env python from pathlib import Path from shutil import copyfile source = Path('words.txt') destination = Path('words_bck.txt') copyfile(source, destination) ``` 該示例復制了`words.txt`文件。 ```py source = Path('words.txt') ``` 通過將文件名傳遞給`Path`構造器來創建文件對象。 ## 連接路徑 路徑可以用`/`運算符或`joinpath()`方法連接。 `join_path.py` ```py #!/usr/bin/env python from pathlib import Path path = Path.home() docs = path / 'Documents' pictures = path / 'Pictures' print(docs) print(pictures) ``` 在示例中,我們使用`/`將兩條路徑連接在一起。 ```py $ join_path.py C:\Users\Jano\Documents C:\Users\Jano\Pictures ``` 這是輸出。 ## `Path.touch` `touch()`創建一個新的空文件; 它等效于 Linux touch 命令。 `touch.py` ```py #!/usr/bin/python3 from pathlib import Path Path('myfile.txt').touch() ``` 我們創建一個新的空`myfile.txt`。 ## `Path.rename` `rename()`重命名文件或目錄。 `rename.py` ```py #!/usr/bin/env python from pathlib import Path path = Path('names.txt') path.rename('mynames.txt') ``` 該示例將當前工作目錄中的`names.txt`重命名為`mynames.txt`。 ## 路徑名 我們使用絕對文件路徑或相對路徑來引用文件。 路徑具有不同的表示形式。 Windows 使用與 Linux 不同的文件路徑。 `path_names.py` ```py #!/usr/bin/env python from pathlib import Path path = Path('C:/Users/Jano/Downloads/wordpress-5.1.tar.gz') print(path) print(path.as_uri()) print(path.as_posix()) ``` 該示例顯示了三種不同的文件路徑結構。 ```py $ path_names.py C:\Users\Jano\Downloads\wordpress-5.1.tar.gz file:///C:/Users/Jano/Downloads/wordpress-5.1.tar.gz C:/Users/Jano/Downloads/wordpress-5.1.tar.gz ``` 第一個是 Windows 文件路徑。 第二個是 URI 樣式。 第三個是 POSIX 樣式。 ## 相對路徑 相對路徑從某個給定的工作目錄開始,從而避免了提供完整的絕對路徑的需要。 例如,從`/home/users/jano/`目錄的角度來看,`data.txt`是`/home/users/jano/data.txt`的相對路徑。 換句話說,當我們位于`/home/users/jano/`目錄中時,我們可以僅通過文件名`data.txt`來關聯該文件,而無需指定完整路徑。 `relative_path.py` ```py #!/usr/bin/env python from pathlib import Path path = Path('C:/Users/Jano/Downloads/wordpress-5.1.tar.gz') home = Path.home() relative = path.relative_to(home) print(relative) ``` 該示例在給定主目錄的情況下打印存檔文件的相對路徑。 ```py $ relative_path.py Downloads\wordpress-5.1.tar.gz ``` 這是輸出。 ## `Path.parent` 使用`parent()`和`parents()`,我們可以獲得路徑的邏輯父級。 `parents.py` ```py #!/usr/bin/env python from pathlib import Path path = Path('C:/Users/Jano/Documents') print(f"The parent directory of {path} is {path.parent}") print(f"The parent of the parent of {path} is {path.parent.parent}") print(f"All the parents of {path.parent}: ") print(list(path.parents)) ``` 該示例打印路徑的父級。 ```py print(f"The parent of the parent of {path} is {path.parent.parent}") ``` 我們可以得到父級的父級。 ```py $ parents.py The parent directory of C:\Users\Jano\Documents is C:\Users\Jano The parent of the parent of C:\Users\Jano\Documents is C:\Users All the parents of C:\Users\Jano: [WindowsPath('C:/Users/Jano'), WindowsPath('C:/Users'), WindowsPath('C:/')] ``` 這是輸出。 ## 路徑子元素 路徑由子元素組成,例如驅動器或根。 `parts.py` ```py #!/usr/bin/env python from pathlib import Path path = Path('C:/Users/Jano/Documents') print(path.parts) print(path.drive) print(path.root) ``` 該程序將打印路徑的某些部分。 ```py print(path.parts) ``` 通過`parts`,可以訪問路徑的各種組件。 ```py print(path.drive) ``` `drive`給出一個代表驅動器號或名稱的字符串(如果有)。 ```py print(path.root) ``` `root`給出一個表示(本地或全局)根的字符串(如果有)。 ```py $ parts.py ('C:\\', 'Users', 'Jano', 'Documents') C: \ ``` 這是輸出。 以下程序給出了路徑的其他部分。 `parts2.py` ```py #!/usr/bin/env python from pathlib import Path import os path = Path('C:/Users/Jano/Downloads/wordpress-5.1.tar.gz') print(f"The stem is: {path.stem}") print(f"The name is: {path.name}") print(f"The suffix is: {path.suffix}") print(f"The anchor is: {path.anchor}") print(f"File name: {os.path.splitext(path.stem)[0]}") print("The suffixes: ") print(path.suffixes) ``` 該程序將打印詞干,名稱,后綴和錨點。 ```py $ parts2.py The stem is: wordpress-5.1.tar The name is: wordpress-5.1.tar.gz The suffix is: .gz The anchor is: C:\ File name: wordpress-5.1 The suffixes: ['.1', '.tar', '.gz'] ``` 這是輸出。 ## `Path.iterdir` `iterdir()`產生目錄內容的路徑對象。 `list_dirs.py` ```py #!/usr/bin/env python from pathlib import Path path = Path('C:/Users/Jano/Documents') dirs = [e for e in path.iterdir() if e.is_dir()] print(dirs) ``` 該示例打印指定目錄的子目錄。 我們檢查路徑對象是否為`is_dir()`目錄。 以下示例在指定目錄內打印文件。 `list_files.py` ```py #!/usr/bin/env python from pathlib import Path path = Path('C:/Users/Jano/Documents') files = [e for e in path.iterdir() if e.is_file()] print(files) ``` 我們檢查路徑對象是否為`is_file()`文件。 ## 路徑遍歷 球形模式使用通配符指定文件名集。 例如,`*.txt`表示所有名稱以`.txt`結尾的文件。 `*`是代表任何字符串的通配符。 另一個常見的通配符是問號(?),代表一個字符。 路徑提供`glob()`和`rglob()`。 后者用于遞歸`glob`。 它將`**/`添加到給定模式的前面。 `globbing.py` ```py #!/usr/bin/env python from pathlib import Path path = Path('C:/Users/Jano/Documents/pyprogs') for e in path.rglob('*.py'): print(e) # for e in path.glob('**/*.py'): # print(e) ``` 該示例打印指定目錄及其所有子目錄中的所有 Python 文件。 請注意,此類操作可能非常耗時。 ```py for e in path.rglob('*.py'): print(e) # for e in path.glob('**/*.py'): # print(e) ``` 這兩個操作是等效的。 ## 路徑樹 以下示例是一個工具,它以分層樹結構輸出指定目錄的內容。 `tree.py` ```py #!/usr/bin/env python from pathlib import Path def tree(directory): print(f'+ {directory}') for path in sorted(directory.rglob('*')): depth = len(path.relative_to(directory).parts) spacer = ' ' * depth # print(f'{spacer}+ {path.name}') if path.is_file(): print(f'{spacer}f {path.name}') else: print(f'{spacer}d {path.name}') path = Path.home() / 'Downloads' tree(path) ``` 該程序以樹形結構輸出`Downloads`目錄的內容。 ## 按擴展名計數文件 在以下示例中,我們按擴展名對所有文件進行計數。 我們將`collections`的`Counter`用于任務。 `count_files.py` ```py #!/usr/bin/env python import collections from pathlib import Path docs = Path.home() / 'Documents' files = [path.suffix for path in docs.iterdir() if path.is_file() and path.suffix] data = collections.Counter(files) print(data) for key, val in data.items(): print(f'{key}: {val}') ``` 該示例對在`Documents`目錄中按擴展名分組的文件進行計數。 ```py files = [path.suffix for path in docs.iterdir() if path.is_file() and path.suffix] ``` 在列表推導式中,我們確保路徑對象是帶有`is_file()`的文件,并且該文件具有`en`擴展名。 文件可能沒有擴展名。 特別是在 Unix 系統上。 ```py $ count_files.py Counter({'.txt': 7, '.pdf': 3, '.ini': 1, '.zip': 1, '.rtf': 1}) .pdf: 3 .txt: 7 .ini: 1 .zip: 1 .rtf: 1 ``` 這是一個示例輸出。 ## `Path.read_text` `read_text()`以字符串形式讀取文件的內容。 該文件被打開,然后關閉。 可選參數的含義與`open()`中的含義相同。 `read_text.py` ```py #!/usr/bin/env python from pathlib import Path path = Path('words.txt') content = path.read_text() print(content) ``` 該示例使用`read_text()`讀取`words.txt`文件的內容。 ```py $ read_text.py blue forest sky ocean rabbit clue ``` 這是輸出。 ## `Path.open`讀取文件 `open()`會打開路徑指向的文件,就像內置的`open()`函數一樣。 `read_with_open.py` ```py #!/usr/bin/env python from pathlib import Path path = Path('words.txt') with path.open() as f: lines = f.readlines() print(lines) for line in lines: print(line.rstrip()) ``` 該示例使用`open()`打開`words.txt`文件,并使用`readlines()`讀取內容。 ## `Path`讀取二進制文件 可以使用`read_bytes()`讀取圖像等二進制文件。 `read_bytes.py` ```py #!/usr/bin/env python from pathlib import Path import binascii from more_itertools import sliced path = Path('sid.jpg') hexed = binascii.hexlify(path.read_bytes()) mybytes = list(sliced(hexed, 2)) i = 0 for b in mybytes: print(b.decode("utf-8") , end=' ') i += 1 if (i % 30 == 0): print() ``` 該示例讀取 JPEG 圖片并將其以十六進制表示形式打印到終端。 ## 路徑`write_text` `write_text`以文本模式打開文件,向其中寫入數據,然后關閉文件。 `write_text.py` ```py #!/usr/bin/python3 from pathlib import Path path = Path('myfile.txt') path.touch() path.write_text('This is myfile.txt') ``` 該示例使用`touch()`創建一個新的空文件,并使用`write_text()`將一些文本數據寫入該文件。 ## 新文章 內容管理系統通常根據當年和月份將其新創建的文章放在目錄結構中。 下一個示例對此進行了演示。 `new_article.py` ```py #!/usr/bin/env python from pathlib import Path import datetime now = datetime.datetime.now() year = now.year month = now.month name = input('Enter article name:') path1 = Path('articles') / str(year) / str(month) path1.mkdir(parents=True) path2 = path1 / f'{name}.txt' path2.touch() print(f'Article created at: {path2}') ``` 該程序要求用戶輸入。 它根據當前年份和月份創建一個新的文本文件。 ## `PrettyTable`示例 處理文件和目錄時,可以使用`PrettyTable`模塊獲得更好的輸出。 `simple_table.py` ```py #!/usr/bin/env python from pathlib import Path import datetime from prettytable import PrettyTable path = Path('C:/Users/Jano/Documents/') pt = PrettyTable() pt.field_names = ["File name", "Size", "Created"] pt.align["File name"] = "l" pt.align["Size"] = "r" pt.align["Created"] = "l" for e in path.glob('**/*.txt'): created = datetime.datetime.fromtimestamp(e.stat().st_ctime) size = e.stat().st_size pt.add_row([e.name, size, f"{created:%Y-%m-%d}"]) print(pt) ``` 該示例在一個漂亮的表中顯示`Documents`內的所有文本文件。 該表包含三列:文件名,大小和創建日期。 ```py $ simple_table.py +-------------------------------------------------------+-------+------------+ | File name | Size | Created | +-------------------------------------------------------+-------+------------+ | data.txt | 0 | 2019-02-27 | | eternal_return.txt | 10467 | 2019-03-03 | | potvrdenie.txt | 773 | 2019-01-14 | | text_processing.txt | 750 | 2019-02-18 | | website-inspire.txt | 62 | 2019-03-03 | | words.txt | 31 | 2018-12-30 | | úvod do Symfony.txt | 7613 | 2019-03-04 | | robots.txt | 240 | 2019-01-01 | | robots.txt | 240 | 2019-02-03 | ... ``` 這是樣本部分輸出。 在本教程中,我們介紹了標準的 Python `pathlib`模塊。 您可能也對以下相關教程感興趣: [PrettyTable 教程](/python/prettytable/), [Python `argparse`教程](/python/argparse/), [Python 教程](/lang/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>

                              哎呀哎呀视频在线观看