今天講解文件整理腳本的實現過程。這是一個很有用的技能,可以幫助你管理你的電腦上的各種文件。需求如下:
- 需求內容:給定一個打算整理的文件夾目錄,這個腳本可以將該目錄下的所有文件都揪出來,并且根據后綴名歸類到不同的文件夾里。
- python能力:使用python的內置模塊os和shutil來操作文件和目錄,使用glob模塊來匹配文件名,使用with語句來打開和關閉文件。
- 實現步驟:
- 導入需要的模塊
- 定義要整理的目錄和要創建的子目錄
- 遍歷目錄下的所有文件,獲取文件名和后綴名
- 根據后綴名判斷文件屬于哪個子目錄,如果不存在則創建
- 使用shutil模塊的move函數將文件移動到對應的子目錄
- 打印完成信息
教程面對的是小白級別的讀者,所以我會盡量用簡單明了的語言來解釋每一行代碼的作用,并且給出完整的代碼示例。我希望你能跟著我一起學習,并且在自己的電腦上運行和測試這個腳本。
導入python的內置模塊
首先,我們需要導入一些python的內置模塊,它們可以幫助我們操作文件和目錄。os模塊提供了一些基本的文件系統功能,比如獲取文件路徑,創建和刪除目錄等。shutil模塊提供了一些高級的文件操作功能,比如復制和移動文件等。glob模塊可以讓我們用通配符來匹配文件名,比如*.txt可以匹配所有后綴名為txt的文件。with語句可以讓我們方便地打開和關閉文件,不用擔心忘記關閉或者出現異常。下面是導入模塊的代碼:
# 導入需要的模塊
import os
import shutil
import glob
定義要整理的目錄和要創建的子目錄
接下來,我們需要定義要整理的目錄和要創建的子目錄。我們假設要整理的目錄是D:test,里面有各種類型的文件,比如文本文件,圖片文件,音頻文件等。我們想要把這些文件按照后綴名歸類到不同的子目錄里,比如txt文件放到D:testtxt,jpg文件放到D:testjpg,mp3文件放到D:testmp3等。我們可以用一個字典來存儲這些子目錄的信息,鍵是后綴名,值是對應的子目錄路徑。下面是定義目錄的代碼:
# 定義要整理的目錄和要創建的子目錄
source_dir = "D:test" # 要整理的目錄
sub_dirs = { # 子目錄信息
".txt": "D:testtxt",
".jpg": "D:testjpg",
".mp3": "D:testmp3"
}
遍歷目錄下的所有文件,獲取文件名和后綴名
然后,我們需要遍歷要整理的目錄下的所有文件,獲取文件名和后綴名。我們可以用os模塊的listdir函數來獲取目錄下的所有文件和子目錄,然后用os模塊的path.splitext函數來分割文件名和后綴名。我們還需要判斷是否是文件,因為listdir函數會返回子目錄,我們不需要處理它們。我們可以用os模塊的path.isfile函數來判斷是否是文件。下面是遍歷目錄的代碼:
# 遍歷目錄下的所有文件,獲取文件名和后綴名
for item in os.listdir(source_dir): # 遍歷目錄
if os.path.isfile(os.path.join(source_dir, item)): # 判斷是否是文件
file_name, file_ext = os.path.splitext(item) # 分割文件名和后綴名
print(file_name, file_ext) # 打印文件名和后綴名
根據后綴名判斷文件屬于哪個子目錄
接著,我們需要根據后綴名判斷文件屬于哪個子目錄,如果不存在則創建。我們可以用字典的get方法來根據鍵獲取值,如果鍵不存在則返回None。我們可以用os模塊的path.exists函數來判斷子目錄是否存在,如果不存在則用os模塊的makedirs函數來創建。下面是判斷和創建子目錄的代碼:
# 根據后綴名判斷文件屬于哪個子目錄,如果不存在則創建
sub_dir = sub_dirs.get(file_ext) # 根據后綴名獲取子目錄路徑
if sub_dir: # 如果子目錄路徑存在
if not os.path.exists(sub_dir): # 如果子目錄不存在
os.makedirs(sub_dir) # 創建子目錄
print(f"Created {sub_dir}") # 打印創建信息
將文件移動到對應的子目錄
接下來,我們需要使用shutil模塊的move函數將文件移動到對應的子目錄。我們需要提供源文件路徑和目標文件路徑作為參數。我們可以用os模塊的path.join函數來拼接路徑。下面是移動文件的代碼:
# 使用shutil模塊的move函數將文件移動到對應的子目錄
source_file = os.path.join(source_dir, item) # 源文件路徑
target_file = os.path.join(sub_dir, item) # 目標文件路徑
shutil.move(source_file, target_file) # 移動文件
print(f"Moved {source_file} to {target_file}") # 打印移動信息
打印完成信息
最后,我們需要打印完成信息,告訴用戶整理工作已經完成。下面是打印完成信息的代碼:
# 打印完成信息
print("Done!")
這樣,我們就完成了一個簡單的文件整理腳本。完整的代碼如下:
# 導入需要的模塊
import os
import shutil
import glob
# 定義要整理的目錄和要創建的子目錄
source_dir = "D: est" # 要整理的目錄
sub_dirs = { # 子目錄信息
".txt": "D: est xt",
".jpg": "D: estjpg",
".mp3": "D: estmp3"
}
# 遍歷目錄下的所有文件,獲取文件名和后綴名
for item in os.listdir(source_dir): # 遍歷目錄
if os.path.isfile(os.path.join(source_dir, item)): # 判斷是否是文件
file_name, file_ext = os.path.splitext(item) # 分割文件名和后綴名
print(file_name, file_ext) # 打印文件名和后綴名
# 根據后綴名判斷文件屬于哪個子目錄,如果不存在則創建
sub_dir = sub_dirs.get(file_ext) # 根據后綴名獲取子目錄路徑
if sub_dir: # 如果子目錄路徑存在
if not os.path.exists(sub_dir): # 如果子目錄不存在
os.makedirs(sub_dir) # 創建子目錄
print(f"Created {sub_dir}") # 打印創建信息
# 使用shutil模塊的move函數將文件移動到對應的子目錄
source_file = os.path.join(source_dir, item) # 源文件路徑
target_file = os.path.join(sub_dir, item) # 目標文件路徑
shutil.move(source_file, target_file) # 移動文件
print(f"Moved {source_file} to {target_file}") # 打印移動信息
# 打印完成信息
print("Done!")
如果你在自己的電腦上運行這個腳本,你會看到類似下面的輸出:
test1 .txt
test2 .jpg
test3 .mp3
Created D:testtxt
Moved D:testtest1.txt to D:testtxttest1.txt
Created D:testjpg
Moved D:testtest2.jpg to D:testjpgtest2.jpg
Created D:testmp3
Moved D:testtest3.mp3 to D:testmp3test3.mp3
Done!
-
自動化
+關注
關注
29文章
5753瀏覽量
82264 -
文件
+關注
關注
1文章
578瀏覽量
25250 -
python
+關注
關注
56文章
4825瀏覽量
86355
發布評論請先 登錄
評論