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

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

編輯:Python

創建目錄


操作系統。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.Py
copyfile('d:/tools/first.py'、'e:/first.py')

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

副本目錄

如果我們想將一個目錄中的所有內容(包括子目錄和文件、子目錄中的子目錄和文檔等)復制到另一個目錄,我們可以使用shutil的copytree功能。如下所示從shutil導入copytree
#將d:/tools/aaa目錄中的所有內容復制到e:/bbb
copytree('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/bbb
os.rename('d:/tools/aaa','d:/tools/bbb')

# 修改文件名 d:/tools/first.py 為 d:/tools/second.py
os.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) / headcount
print(avgfee)

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