python tts 保存_Python 文件和目录操作学习
文件與文件路徑
文件有兩個關鍵屬性:文件名和路徑。
路徑指明了文件在計算機上的位置。
文件名中,最后一個句點之后的部分稱為文件的“擴展名”,它指出了文件的類型
目錄也叫文件夾,文件夾可以包含文件和其他文件夾
路徑分隔符
在 Windows 上,路徑書寫使用倒斜杠作為文件夾之間的分隔符
在 OS X 和Linux 上,使用正斜杠作為它們的路徑分隔符
解決方法: 如果將單個文件和路徑上的文件夾名稱的字符串傳遞給它,os.path.join()就會返回一個文件路徑的字符串,包含正確的路徑分隔符。例如:os.path.join('usr', 'bin', 'spam')
當前工作目錄
os.getcwd():取得當前工作路徑的字符串
os.chdir():改變當前工作路徑
絕對路徑與相對路徑
有兩種方法指定一個文件路徑:
絕對路徑,總是從根文件夾開始
相對路徑,它相對于程序的當前工作目錄
用os.makedirs()創建新文件夾
os.makedirs()將創建所有必要的中間文件夾,目的是確保完整路徑名存在
os.path模塊
os.path 模塊包含了許多與文件名和文件路徑相關的有用函數
因為 os.path 是 os 模塊中的模塊,所以只要執行 import os 就可以導入它
處理絕對路徑和相對路徑
os.path 模塊提供了一些函數,返回一個相對路徑的絕對路徑,以及檢查給定的路徑是否為絕對路徑:
調用 os.path.abspath(path)將返回參數的絕對路徑的字符串。這是將相對路徑轉換為絕對路徑的簡便方法。
調用 os.path.isabs(path),如果參數是一個絕對路徑,就返回 True,如果參數是一個相對路徑,就返回 False。
調用 os.path.relpath(path, start)將返回從 start 路徑到 path 的相對路徑的字符串。如果沒有提供 start,就使用當前工作目錄作為開始路徑。
調用 os.path.dirname(path)將返回一個字符串,它包含 path 參數中最后一個斜杠之前的所有內容。調用 os.path.basename(path)將返回一個字符串,它包含 path 參數中最后一個斜杠之后的所有內容。
如果同時需要一個路徑的目錄名稱和基本名稱,就可以調用 os.path.split()
可以調用 os.path.dirname()和 os.path.basename(),將它們的返回值放在一個元組中,從而得到同樣的元組
os.path.split()不會接受一個文件路徑并返回每個文件夾的字符串的列表。如果需要這樣,請使用split()字符串方法,并根據os.path.sep 中的字符串進行分割?;貞浺幌?#xff0c;根據程序運行的計算機,os.path.sep 變量設置為正確的文件夾分割斜杠。
split()字符串方法將返回一個列表,包含該路徑的所有部分。如果向它傳遞os.path.sep,就能在所有操作系統上工作。
查看文件大小和文件夾內容
一旦有辦法處理文件路徑,就可以開始搜集特定文件和文件夾的信息。os.path 模塊提供了一些函數,用于查看文件的字節數以及給定文件夾中的文件和子文件夾
調用 os.path.getsize(path)將返回 path 參數中文件的字節數
調用 os.listdir(path)將返回文件名字符串的列表,包含 path 參數中的每個文件(請注意,這個函數在 os 模塊中,而不是 os.path)
檢查路徑有效性
如果你提供的路徑不存在,許多 Python 函數就會崩潰并報錯。os.path 模塊提供了一些函數,用于檢測給定的路徑是否存在,以及它是文件還是文件夾
如果 path 參數所指的文件或文件夾存在,調用 os.path.exists(path)將返回 True,否則返回 False。
如果 path 參數存在,并且是一個文件,調用 os.path.isfile(path)將返回 True,否則返回 False。
如果 path 參數存在,并且是一個文件夾,調用 os.path.isdir(path)將返回 True,否則返回 False。
利用 os.path.exists()函數,可以確定 DVD 或閃存盤當前是否連在計算機上
文件讀寫過程
純文本文件 只包含基本文本字符,不包含字體、大小和顏色信息
二進制文件 是所有其他文件類型,諸如字處理文檔、PDF、圖像、電子表格和可執行程序
用open()函數打開文件
要用 open()函數打開一個文件,就要向它傳遞一個字符串路徑,表明希望打開的文件。這既可以是絕對路徑,也可以是相對路徑。open()函數返回一個 File 對象
讀取文件內容
如果你希望將整個文件的內容讀取為一個字符串值,就使用 File 對象的 read()方法
如果你將文件的內容看成是單個大字符串,read()方法就返回保存在該文件中的這個字符串
或者,可以使用 readlines()方法,從該文件取得一個字符串的列表。列表中的每個字符串就是文本中的每一行
每個字符串值都以一個換行字符\n 結束。除了文件的最后一行。與單個大字符串相比,字符串的列表通常更容易處理
寫入文件
如果打開文件時用讀模式,就不能寫入文件
需要以“寫入純文本模式”或“添加純文本模式”打開該文件,或簡稱為“寫模式”和“添加模式”
寫模式將覆寫原有的文件,從頭開始,就像你用一個新值覆寫一個變量的值
將'w'作為第二個參數傳遞給 open(),以寫模式打開該文件
將'a'作為第二個參數傳遞給 open(),以添加模式打開該文件
如果傳遞給 open()的文件名不存在,寫模式和添加模式都會創建一個新的空文件。在讀取或寫入文件后,調用 close()方法,然后才能再次打開該文件。
write()方法不會像 print()函數那樣,在字符串的末尾自動添加換行字符。必須自己添加該字符
用shelve模塊保存變量
要利用shelve模塊讀寫數據,首先要導入它。調用函數shelve.open()并傳入一個文件名,然后將返回的值保存在一個變量中。
可以對這個變量的 shelf 值進行修改,就像它是一個字典一樣。當你完成時,在這個值上調用close()。
這些二進制文件包含了存儲在 shelf 中的數據。這些二進制文件的格式并不重要,你只需要知道 shelve 模塊做了什么,而不必知道它是怎么做的。該模塊讓你不用操心如何將程序的數據保存到文件中。
你的程序稍后可以使用 shelve 模塊,重新打開這些文件并取出數據。shelf 值不必用讀模式或寫模式打開,因為它們在打開后,既能讀又能寫。
就像字典一樣,shelf 值有 keys()和 values()方法,返回 shelf 中鍵和值的類似列表的值。因為這些方法返回類似列表的值,而不是真正的列表,所以應該將它們傳遞給 list()函數,取得列表的形式
用pprint.pformat()函數保存變量
pprint.pprint()函數將列表或字典中的內容“漂亮打印”到屏幕,而 pprint.pformat()函數將返回同樣的文本字符串,但不是打印它。這個字符串不僅是易于閱讀的格式,同時也是語法上正確的 Python 代碼。假定你有一個字典,保存在一個變量中,你希望保存這個變量和它的內容,以便將來使用。pprint.pformat()函數將提供一個字符串,你可以將它寫入.py 文件。該文件將成為你自己的模塊,如果你需要使用存儲在其中的變量,就可以導入它。
import 語句導入的模塊本身就是 Python 腳本。如果來自 pprint.pformat()的字符串保存為一個.py 文件,該文件就是一個可以導入的模塊,像其他模塊一樣。
由于 Python 腳本本身也是帶有.py 文件擴展名的文本文件,所以你的 Python 程序甚至可以生成其他 Python 程序。然后可以將這些文件導入到腳本中
創建一個.py 文件(而不是利用 shelve 模塊保存變量)的好處在于,因為它是一個文本文件,所以任何人都可以用一個簡單的文本編輯器讀取和修改該文件的內容。但是,對于大多數應用,利用 shelve 模塊來保存數據,是將變量保存到文件的最佳方式。只有基本數據類型,諸如整型、浮點型、字符串、列表和字典,可以作為簡單文本寫入一個文件。例如,File 對象就不能夠編碼為文本。
shutil模塊
shutil(或稱為 shell 工具)模塊中包含一些函數,讓你在 Python 程序中復制、移動、改名和刪除文件。要使用 shutil 的函數,首先需要 import shutil。
復制文件和文件夾
shutil.copy(source, destination),將路徑source 處的文件復制到路徑destination處的文件夾(source 和 destination 都是字符串)。如果 destination 是一個文件名,它將作為被復制文件的新名字。該函數返回一個字符串,表示被復制文件的路徑。
shutil.copy()將復制一個文件,shutil.copytree()將復制整個文件夾,以及它包含的文件夾和文件。調用 shutil.copytree(source, destination),將路徑 source 處的文件夾,包括它的所有文件和子文件夾,復制到路徑 destination 處的文件夾。source 和destination 參數都是字符串。該函數返回一個字符串,是新復制的文件夾的路徑。
文件和文件夾的移動與改名
shutil.move(source, destination),將路徑 source 處的文件夾移動到路徑destination,并返回新位置的絕對路徑的字符串。
如果 destination 指向一個文件夾,source 文件將移動到 destination 中,并保持原來的文件名。
destination 路徑也可以指定一個文件名。在下面的例子中,source 文件被移動并改名。
構成目的地的文件夾必須已經存在,否則 Python 會拋出異常
永久刪除文件和文件夾
利用 os 模塊中的函數,可以刪除一個文件或一個空文件夾。但利用 shutil 模塊,可以刪除一個文件夾及其所有的內容。
用 os.unlink(path)將刪除 path 處的文件。
調用 os.rmdir(path)將刪除 path 處的文件夾。該文件夾必須為空,其中沒有任何文件和文件夾。
調用 shutil.rmtree(path)將刪除 path 處的文件夾,它包含的所有文件和文件夾都會被刪除。
用send2trash模塊安全地刪除
因為 Python 內建的 shutil.rmtree()函數不可恢復地刪除文件和文件夾,所以 用起來可能有危險。刪除文件和文件夾的更好方法,是使用第三方的 send2trash 模塊。你可以在終端窗口中運行 pip install send2trash,安裝該模塊
利用 send2trash,比 Python 常規的刪除函數要安全得多,因為它會將文件夾和文件發送到計算機的垃圾箱或回收站,而不是永久刪除它們。如果因程序缺陷而用send2trash 刪除了某些你不想刪除的東西,稍后可以從垃圾箱恢復。
一般來說,總是應該使用 send2trash.send2trash()函數來刪除文件和文件夾。雖然它將文件發送到垃圾箱,讓你稍后能夠恢復它們,但是這不像永久刪除文件,不會釋放磁盤空間。如果你希望程序釋放磁盤空間,就要用 os 和 shutil 來刪除文件和文件夾。請注意,send2trash()函數只能將文件送到垃圾箱,不能從中恢復文件。
遍歷目錄樹
os.walk()函數被傳入一個字符串值,即一個文件夾的路徑。你可以在一個 for循環語句中使用 os.walk()函數,遍歷目錄樹,就像使用 range()函數遍歷一個范圍的數字一樣。
os.walk()在循環的每次迭代中,返回 3 個值:
當前文件夾名稱的字符串。
當前文件夾中子文件夾的字符串的列表。
當前文件夾中文件的字符串的列表。
所謂當前文件夾,是指 for 循環當前迭代的文件夾。程序的當前工作目錄,不會因為os.walk()而改變。
用zipfile模塊壓縮文件
讀取ZIP文件
要讀取ZIP文件的內容,首先必須創建一個ZipFile對象(請注意大寫首字母 Z和 F)。ZipFile對象在概念上與File對象相似
要創建一個 ZipFile對象,就調用 zipfile.ZipFile()函數,向它傳入一個字符串,表示.zip 文件的文件名。
請注意,zipfile 是 Python 模塊的名稱,ZipFile()是函數的名稱。
ZipFile 對象有一個 namelist()方法,返回 ZIP 文件中包含的所有文件和文件夾的字符串的列表。這些字符串可以傳遞給 ZipFile 對象的 getinfo()方法,返回一個關于特定文件的 ZipInfo 對象。ZipInfo 對象有自己的屬性,諸如表示字節數的 file_size和 compress_size,它們分別表示原來文件大小和壓縮后文件大小。ZipFile 對象表示整個歸檔文件,而 ZipInfo 對象則保存該歸檔文件中每個文件的有用信息。
從ZIP文件中解壓縮
ZipFile 對象的 extractall()方法從ZIP文件中解壓縮所有文件和文件夾,放到當前工作目錄中
可以向extractall()傳遞的一個文件夾名稱,它將文件解壓縮到那個文件夾,而不是當前工作目錄
如果傳遞給 extractall()方法的文件夾不存在,它會被創建
ZipFile 對象的 extract()方法從 ZIP 文件中解壓縮單個文件
傳遞給 extract()的字符串,必須匹配 namelist()返回的字符串列表中的一個。或者,你可以向 extract()傳遞第二個參數,將文件解壓縮到指定的文件夾,而不是當前工作目錄。如果第二個參數指定的文件夾不存在,Python 就會創建它。extract()的返回值是被壓縮后文件的絕對路徑。
創建和添加到ZIP文件
要創建你自己的壓縮 ZIP 文件,必須以“寫模式”打開 ZipFile 對象,即傳入'w'作為第二個參數(這類似于向 open()函數傳入'w',以寫模式打開一個文本文件)。
如果向 ZipFile 對象的 write()方法傳入一個路徑,Python 就會壓縮該路徑所指的文件,將它加到 ZIP 文件中。write()方法的第一個參數是一個字符串,代表要添加的文件名。第二個參數是“壓縮類型”參數,它告訴計算機使用怎樣的算法來壓縮文件??梢钥偸菍⑦@個值設置為 zipfile.ZIP_DEFLATED(這指定了 deflate 壓縮算法,它對各種類型的數據都很有效)。
就像寫入文件一樣,寫模式將擦除 ZIP 文件中所有原有的內容。如果只是希望將文件添加到原有的 ZIP 文件中,就要向 zipfile.ZipFile()傳入'a'作為第二個參數,以添加模式打開 ZIP 文件。
總結
以上是生活随笔為你收集整理的python tts 保存_Python 文件和目录操作学习的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 朋友饭店开业去捧场怎么样?
- 下一篇: 沂源醉美双泉酒庄生产什么酒?
