python搜索指定類(lèi)型文件以及批量移動(dòng)文件程序詳解
搜索文件并移動(dòng)的python程序
使用python寫(xiě)一個(gè)程序,其功能滿足:可以搜索指定目錄下的某類(lèi)型的文件,并可以移動(dòng)到指定的目錄。

1.示例文件及路徑準(zhǔn)備
作為示例,在D盤(pán)中放一個(gè)名為pic1的文件夾,在該文件夾中放入兩個(gè)png圖片,并在pic1內(nèi)再創(chuàng)建一個(gè)文件夾,里邊也隨便放兩張png圖片。如圖所示。
在D盤(pán)的ABC文件夾中,創(chuàng)建一個(gè)名為pic2的文件夾。
本程序要求:搜索目錄"D://pic1"下的所有文件擴(kuò)展名為png的圖片。并將其全部移動(dòng)至"D://ABC/pic2"目錄下。


2.代碼示例
分別定義一個(gè)搜索函數(shù)和一個(gè)批量移動(dòng)函數(shù)。
搜索函數(shù)需要傳入的參數(shù)為root:要搜索的目錄;target為目標(biāo)文件類(lèi)型(即擴(kuò)展名)。
搜索函數(shù)輸出 由目標(biāo)文件path+文件名構(gòu)成的列表。
批量移動(dòng)函數(shù)傳入的file_list參數(shù)是一個(gè)列表,形如搜索函數(shù)的輸出結(jié)果,元素為帶有path的文件名。dest為需要移動(dòng)到的目錄。
import os, shutil
file_list = []
# 搜索函數(shù)
def search_file(root, target):
for file in os.listdir(root):
path = root
try:
path = path + os.sep + file
if os.path.isdir(path):
search_file(path, target)
else:
if file.split('.')[-1] == target:
file_list.append(path)
except PermissionError as e:
print(e)
return file_list
# 批量移動(dòng)函數(shù)
def move_file(file_list, dest):
for file in file_list:
try:
shutil.move(file, dest)
except shutil.Error as e:
print(e)
# 寫(xiě)入目標(biāo)參數(shù)root,
def main():
root = "D:\\pic1"
target = "png"
dest_dir = "D:\\ABC\\pic2"
result = search_file(root, target)
print(result)
move_file(result, dest_dir)
if __name__ == '__main__':
main()

如圖,目標(biāo)文件被成功搜索出并轉(zhuǎn)移:

- 其中搜索函數(shù)需要用到遞歸的寫(xiě)法,對(duì)文件夾中的不定數(shù)的文件夾進(jìn)行遍歷。
- 且在其中使用到了異常處理的寫(xiě)法,是為了避免遇到不可訪問(wèn)的系統(tǒng)文件夾,導(dǎo)致程序運(yùn)行中斷。(除C盤(pán)外,這樣的文件夾通常不會(huì)在二級(jí)中,比如在D盤(pán)的根目錄下可能會(huì)有。這里的異常處理寫(xiě)法可以有效解決該問(wèn)題。)
3.命令行寫(xiě)法
將上述代碼改寫(xiě)文能在命令行傳參、調(diào)用的形式。
首先將目標(biāo)文件放回原路徑,放好。
import sys
import os, shutil
file_list = []
# 定義一個(gè)搜索功能的函數(shù)
def search_file(root, file_name):
for file in os.listdir(root):
path = root
try:
path = path + os.sep + file
if os.path.isdir(path):
search_file(path, file_name)
else:
if file.split('.')[-1] == file_name:
file_list.append(path)
except PermissionError:
pass
return file_list
def move_file(file_list, dest):
for file in file_list:
shutil.move(file, dest)
def main(argv):
root = argv[1]
target = argv[2]
dest_dir = argv[3]
result = search_file(root, target)
print(result)
move_file(result, dest_dir)
if __name__ == '__main__':
main(sys.argv)打開(kāi)cmd,目錄調(diào)整好后,輸入py文件名(這里為demo.py)及依次傳入三個(gè)參數(shù)。
即執(zhí)行命令:

代碼成功運(yùn)行,目標(biāo)文件位置被更改。
總結(jié)
到此這篇關(guān)于python搜索指定類(lèi)型文件以及批量移動(dòng)文件程序詳解的文章就介紹到這了,更多相關(guān)python搜索指定類(lèi)型文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
django利用request id便于定位及給日志加上request_id
這篇文章主要介紹了django利用request id便于定位及給日志加上request_id的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧2018-08-08
python3.7將代碼打包成exe程序并添加圖標(biāo)的方法
這篇文章主要介紹了python3.7將代碼打包成exe程序并添加圖標(biāo)的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-10-10
Python?lambda函數(shù)保姆級(jí)使用教程
本文和你一起探索Python中的lambda函數(shù),讓你以最短的時(shí)間明白這個(gè)函數(shù)的原理。也可以利用碎片化的時(shí)間鞏固這個(gè)函數(shù),讓你在處理工作過(guò)程中更高效2022-06-06
python輸出國(guó)際象棋棋盤(pán)的實(shí)例分享
在本篇文章里小編給大家整理的是一篇關(guān)于python輸出國(guó)際象棋棋盤(pán)的實(shí)例詳解,有興趣的朋友們可以參考下。2020-11-11
Django框架之中間件MiddleWare的實(shí)現(xiàn)
這篇文章主要介紹了Django框架之中間件MiddleWare的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
python3獲取當(dāng)前目錄的實(shí)現(xiàn)方法
這篇文章主要介紹了python3獲取當(dāng)前目錄的實(shí)現(xiàn)方法,文中給大家提到了python3獲取當(dāng)前目錄和上級(jí)目錄的方法,需要的朋友可以參考下2019-07-07
關(guān)于sys.stdout和print的區(qū)別詳解
今天小編就為大家分享一篇關(guān)于sys.stdout和print的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
python獲取當(dāng)前目錄路徑和上級(jí)路徑的實(shí)例
下面小編就為大家分享一篇python獲取當(dāng)前目錄路徑和上級(jí)路徑的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04

