程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

文件和目錄操作|多進程和多線程【python進階篇】

編輯:Python

@[toc]

創建目錄

操作系統。MakeDir可以遞歸地創建目錄結構,例如
導入操作系統

makedirs('tmp/python/fileop',exist_ok=True)

將在當前工作目錄下創建TMP目錄,在TMP目錄下創建python目錄,在python目錄下創建fileop目錄
exist_ Ok=true指定如果要創建的目錄已經存在,則不會報告任何錯誤

刪除文件或目錄

操作系統。Remove可以刪除文件,例如

os.remove('sdf.py')

Rmtree()可以遞歸刪除目錄的所有子目錄和子文件,例如

rmtree('tmp',ignore_errors=True)

注意:參數ignore_ Errors=true確保在目錄不為空時不會引發異常。
復制文件
shutil模塊中有許多目錄文件操作功能
要復制文件,可以使用shutil模塊的copyfile功能。
例如
從shutil導入復制文件

#將d:/tools/first Py復制到e:/first.Pycopyfile('d:/tools/first.py'、'e:/first.py')

請注意,如果在復制之前,e:/first Py已經存在,它將被copy覆蓋,因此在使用此函數時必須小心。

副本目錄

如果我們想將一個目錄中的所有內容(包括子目錄和文件、子目錄中的子目錄和文檔等)復制到另一個目錄,我們可以使用shutil的copytree功能。
如下所示
從shutil導入copytree

#將d:/tools/aaa目錄中的所有內容復制到e:/bbbcopytree('d:/tools/aaa'、'e:/new/bbb')

請注意,復制前目標目錄不得存在,否則將報告錯誤。
在執行上述代碼之前,如果e:/new/bbb已存在,則在執行copytree時將報告錯誤
在執行上述代碼之前,如果目錄e:/new不存在,則在執行copytree時,它將創建目錄e:/new,然後創建目錄e:/new/bbb,然後將目錄d:/tools/aaa的所有內容復制到e:/new/bbb。
在執行上述代碼之前,如果目錄e:/new存在,但e:/new/bbb不存在,則在執行copytree時,將僅創建e:/new/bbb,然後將目錄d:/tools/aaa中的所有內容復制到e:/new/bbb。

import os# 修改目錄名 d:/tools/aaa 為 d:/tools/bbbos.rename('d:/tools/aaa','d:/tools/bbb')# 修改文件名 d:/tools/first.py 為 d:/tools/second.pyos.rename('d:/tools/first.py','d:/tools/second.py')

對文件路徑名的操作

對於文件名操作,如獲取文件名、文件所在的目錄以及文件路徑的拼接,可以使用os Path模塊。
通常,我們喜歡使用格式化字符串的方法來拼接文件路徑,但如果您的程序需要在多個平台(如Linux和windows)上運行,則它們路徑的分隔符是不同的。在windows上是\,而在Linux上是/。
在這種情況下,我們應該使用os路徑模塊。它可以自動處理數據,如數據/數據CSV和數據\數據文件路徑差異,如CSV。
例如:

>>> import os>>> path = '/Users/beazley/Data/data.csv'>>> # 獲取路徑中的文件名部分>>> os.path.basename(path)'data.csv'>>> # 獲取路徑中的目錄部分>>> os.path.dirname(path)'/Users/beazley/Data'>>> # 文件路徑的拼接>>> os.path.join('tmp', 'data', os.path.basename(path))'tmp/data/data.csv'

進程和線程的概念

我經常被問及過程和線程之間的區別。
簡單地說:進程是一個正在運行的程序。
我們編寫的python程序(或其他應用程序,如畫筆、QQ等)在運行時稱為進程
打開windows下的任務管理器,其中顯示當前系統上運行的進程。

例如,在以下程序運行後,只有一個線程,即主線程。在主線程中,代碼按順序執行,主線程退出,直到執行結束。與此同時,這一進程已經結束。

fee = input('請輸入午餐費用:')members = input('請輸入聚餐人姓名,以英文逗號,分隔:')# 將人員放入一個列表memberlist = members.split(',') # 得到人數headcount = len(memberlist) # 計算人均費用avgfee = int (fee) / headcountprint(avgfee)

我們可以看到,我們的系統中運行著許多進程,如QQ、搜狗輸入法等。
在運行這些程序之前,它們的程序代碼文件存儲在磁盤上,即擴展名為.Exe的文件。
雙擊它們,然後單擊這些。Exe文件將由操作系統加載到內存中,運行並成為進程
系統中的每個進程至少包含一個線程
線程由操作系統創建。每個線程對應於代碼執行的數據結構,它在代碼執行期間保存重要的狀態信息。
沒有線程,操作系統無法管理和維護代碼操作的狀態信息。
因此,在創建線程之前,操作系統不會執行我們的代碼。
雖然我們之前編寫的python程序中沒有創建線程的代碼,但事實上,當python解釋器程序運行(成為進程)時,操作系統會自動創建一個線程,通常稱為主線程,並在此主線程中執行代碼指令。
當解釋器執行我們的Python程序代碼時。我們的代碼在這個主線程中被解釋和執行。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved