python管理文件神器 os.walk

2021-03-02 Python開發者

(給Python開發者加星標,提升Python技能)

來源:詭途 

https://blog.csdn.net/qq_35866846/article/details/107823636

【導語】:有沒有想過用python寫一個文件管理程序?聽起來似乎沒思路?其實是可以的,因為python已經為你準備好了神器os.walk,進來看看吧!

python中os.walk是一個簡單易用的文件、目錄遍歷器,可以幫助我們高效的處理文件、目錄方面的事情。

本文將詳細介紹os.walk模塊,最後使用os.walk模塊實現一個在指定日誌整理文件的程序。

基本介紹

os.walk():掃描某個指定目錄下所包含的子目錄和文件,返回的是一個迭代器。

基本使用

假設文件夾data有如下的目錄結構(cmd 命令:tree /f)

2.1掃描所有文件

掃描內容:

輸出內容:

掃描路徑:

自頂向下 topdown=True(默認)

自底向上 topdown=False

from os import walkpath="data"for curDir, dirs, files in walk(path):#for curDir, dirs, files in walk(path,topdown=False):    print("現在的目錄:" ,curDir)    print("該目錄下包含的子目錄:" , str(dirs))    print("該目錄下包含的文件:",str(files))    print("*"*20)

自頂向下掃描結果:

現在的目錄:data該目錄下包含的子目錄:['testA', 'testB', 'testC']該目錄下包含的文件:['2020-07-12 - 第一層.xlsx', '2020-07-13 - 第一層.xlsx', '2020-07-14 - 第一層.xlsx']********************現在的目錄:data\testA該目錄下包含的子目錄:[]該目錄下包含的文件:['2020-07-12-A.xlsx', '2020-07-13-A.xlsx', '2020-07-14-A.xlsx']********************現在的目錄:data\testB該目錄下包含的子目錄:[]該目錄下包含的文件:['2020-07-12-B.xlsx', '2020-07-13-B.xlsx', '2020-07-14-B.xlsx']********************現在的目錄:data\testC該目錄下包含的子目錄:[]該目錄下包含的文件:['2020-07-12-C.xlsx', '2020-07-13-C.xlsx', '2020-07-14-C.xlsx']********************

自底向上掃描結果:

現在的目錄:data\testA該目錄下包含的子目錄:[]該目錄下包含的文件:['2020-07-12-A.xlsx', '2020-07-13-A.xlsx', '2020-07-14-A.xlsx']********************現在的目錄:data\testB該目錄下包含的子目錄:[]該目錄下包含的文件:['2020-07-12-B.xlsx', '2020-07-13-B.xlsx', '2020-07-14-B.xlsx']********************現在的目錄:data\testC該目錄下包含的子目錄:[]該目錄下包含的文件:['2020-07-12-C.xlsx', '2020-07-13-C.xlsx', '2020-07-14-C.xlsx']********************現在的目錄:data該目錄下包含的子目錄:['testA', 'testB', 'testC']該目錄下包含的文件:['2020-07-12 - 第一層.xlsx', '2020-07-13 - 第一層.xlsx', '2020-07-14 - 第一層.xlsx']********************

2.2掃描輸出所有文件的路徑
輸出所有文件:
import ospath="data"for curDir, dirs, files in os.walk(path):    for file in files:        print(os.path.join(curDir, file))

data\2020-07-12 - 第一層.xlsxdata\2020-07-13 - 第一層.xlsxdata\2020-07-14 - 第一層.xlsxdata\testA\2020-07-12-A.xlsxdata\testA\2020-07-13-A.xlsxdata\testA\2020-07-14-A.xlsxdata\testB\2020-07-12-B.xlsxdata\testB\2020-07-13-B.xlsxdata\testB\2020-07-14-B.xlsxdata\testC\2020-07-12-C.xlsxdata\testC\2020-07-13-C.xlsxdata\testC\2020-07-14-C.xlsx

輸出指定類型文件

#endswith 截取文件後綴import ospath="data"for curDir, dirs, files in os.walk(path):    [print(os.path.join(curDir, file)) for file in files  if file.endswith(".xlsx")]

2.3掃描輸出所有的子目錄(子文件夾)

# 使用os.walk輸出某個目錄下的所有文件import ospath="data"for curDir, dirs, files in os.walk(path):    for _dir in dirs:        print(os.path.join(curDir, _dir))

data\testAdata\testBdata\testC

案例代碼

#綜合運用os.walk()——文件指定日期整理程序

import pandas as pdimport numpy as npimport os,openpyxldef move_file(file_path,_new_path,date_xl_str):            for curDir, dirs, files in os.walk(file_path):        for file in files:            old_path = os.path.join(curDir, file)            new_path = os.path.join(_new_path, file)            file_date=file.split("_")[-1][:10]             try:                os.rename(old_path,new_path) if file_date in date_xl_str else os.remove(old_path)            except:                os.remove(old_path)
for curDir, dirs, files in os.walk(file_path): for _dir in dirs: os.removedirs(os.path.join(curDir, _dir)) os.mkdir("data")
def qch_date(file_path): wj_names=os.listdir(file_path) wj_list=[] num=0 for wj in wj_names: new_wj=wj[:-11] if new_wj not in wj_list: wj_list.append(new_wj) else: os.remove(file_path+"\\"+wj) num+=1 return num
def refresh_data(file_path,sheet_name,data): book=openpyxl.load_workbook(file_path) writer=pd.ExcelWriter(file_path,engine="openpyxl") writer.book=book ws=book[sheet_name] for row in ws.iter_rows(): for cell in row: cell.value=None idx_num,col_num=data.shape for i in range(1,idx_num+1): for j in range(1,col_num+1): ws.cell(row=i,column=j).value=data.iloc[i-1,j-1] writer.save() writer.close() return None
def check_file(file_path,check_file="文件檢查.xlsx"): wj_names=os.listdir(file_path) data=pd.DataFrame([wj.split("_")[2:] for wj in wj_names],columns=["店鋪名稱","日期"]) data['日期']=data['日期'].str[:10]      nind=data.index.insert(0,'0') data1=data.reindex(index=nind) data1.loc['0']=data.columns data1.reset_index(drop=True,inplace=True)
refresh_data(check_file,"數據源",data1) return None
file_path="data"start_date=input("請輸入開始日期:")end_date=input("請輸入開始日期:")
date_xl_str=[str(i)[:10] for i in pd.date_range(start_date,end_date,freq='D')]
new_path=start_date+"~"+end_datetry: os.mkdir(new_path)except: print("文件夾 【%s】 已存在"%new_path) move_file(file_path,new_path,date_xl_str) num=qch_date(new_path)print("去除重複文件 %s 個"%num)
check_file(new_path)

- EOF -

覺得本文對你有幫助?請分享給更多人

關注「Python開發者」加星標,提升Python技能

點讚和在看就是最大的支持❤️

相關焦點

  • Python管理文件神器 os.walk
    大家好,我是Python人工智慧技術【導語】:有沒有想過用python寫一個文件管理程序?聽起來似乎沒思路?其實是可以的,因為Python已經為你準備好了神器os.walk,進來看看吧!Python中os.walk是一個簡單易用的文件、目錄遍歷器,可以幫助我們高效的處理文件、目錄方面的事情。本文將詳細介紹os.walk模塊,最後使用os.walk模塊實現一個在指定日誌整理文件的程序。1、基本介紹os.walk():掃描某個指定目錄下所包含的子目錄和文件,返回的是一個迭代器。
  • Python|模塊os
    1、os的基本命令import os #列印當前工作路徑os.getcwd()#創建目錄os.mkdir()#返回指定目錄下的所有文件和目錄名os.listdir(path)#運行shell命令os.system(command)#改變工作目錄到diros.chdir(dir)#檢驗給出的路徑是否一個文件
  • Python 小技之 Office 文件轉 PDF
    _enumerate_filename(pathname)    def _enumerate_filename(self, pathname):        '''        讀取所有文件名        '''        full_pathname = os.path.abspath(pathname)        if os.path.isfile
  • Python在人工智慧測試領域的一次實踐
    txt文件創建3萬組預期不匹配的圖像集合的過程如下:1.讓LFW子文件夾兩兩組合(5000多個人名文件夾共有一百多萬種組合)2.從組合的2個子文件夾中分別隨機取出1張人臉圖片3.重複步驟2,3萬次4.寫入txt文件諮詢了吳老後,知道了Python內置的os模塊有個walk()方法,用於通過在目錄樹中遊走輸出在目錄中的文件名
  • Python模塊 | 這份os模塊知識詳解,太牛逼!
    3)os.walk(path)含義 :傳入任意一個path路徑,深層次遍歷指定路徑下的所有子文件夾,返回的是一個由路徑、文件夾列表、文件列表組成的元組。我代碼中寫的方式屬於元組拆包;元組拆包:就是將一個元組中的每個值,賦值給不同的變量;path = r"C:\Users\黃偉\Desktop\publish\os模塊\test_os模塊"for path,dirs,files in os.walk(path):    print(path)    print(dirs)
  • os用法總結:python中必須掌握的內置模塊os,實現與計算機作業系統的常規交互!
    os模塊說明1'''2os 模塊3Os庫是python標準庫,包含幾百個函數4常用路徑操作、進程管理、環境參數等幾類5路徑操作:os.path子庫,處理文件路徑及信息6進程管理:啟動系統中其他程序7環境參數:獲得系統軟體硬體信息等環境參數8'''路徑操作 1import os.path as path
  • Python內置模塊os介紹
    ,非Windows為 /# print(os.sep)# 獲取系統環境信息# print(os.environ)# 獲取指定的環境變量# print(os.environ.get('path'))# 獲取當前的工作目錄,即當前python腳本工作的目錄# print(os.getcwd())
  • Python基礎之模塊之os模塊
    os.getcwd()      #顯示當前python腳本工作路徑os.listdir('dirname')        #返回指定目錄下的所有文件和目錄名os.remove('filename')#刪除一個文件
  • 簡單介紹 os.path 模塊常用方法
    os.path 在python中也算是一個常用的模塊,特別是和文件系統打交道時,涉及到文件、目錄操作經常會用到,你去看一些框架的原始碼的時候也經常會使用到這些方法。os.path.png1、os.path.abspath獲取文件的絕對路徑path = "test.py"print(os.path.abspath(path)) # C:\Users\lzjun\workspace\python_scripts\test.py
  • Python使用進程池管理進程
    和選用線程池來關係多線程類似,當程序中設置到多進程編程時,Python 提供了更好的管理多個進程的方式,就是使用進程池。
  • 整理了十個Python自動化操作,拿走就用!
    批量操作的前提就是對文件夾進行遍歷,使用os模塊可以輕鬆的遍歷文件夾,os.walk 遍歷後產生三個參數:「」代碼如下,大家可以根據自己的路徑進行修改import os    for dirpath, dirnames
  • python模塊之subprocess
    (命令執行狀態碼, 命令執行結果)說明:os.popen(command)函數得到的是一個文件對象,因此除了read()方法外還支持write()等方法,具體要根據command來定;commands模塊只存在於Python 2.7中,且不支持windows平臺,因此commands模塊很少被使用。
  • python基礎
    使用python需要先去官網https://www.python.org/下載並安裝運行環境與
  • 第1天:Python 環境搭建
    Python 的其中一個解釋器 CPython是用 C 語言編寫的、是一個由社群驅動的自由軟體,當前由 Python 軟體基金會管理。1989年的聖誕節期間,由 Python 的創始人為吉多·范羅蘇姆,業餘時間開發。Python 的歷史參考:人生苦短,我用 Python 。
  • python 基礎 — 常用模塊
    python 的 tempstamp 是一個浮點數。\test>python test.py 1 2 3['test.py', '1', '2', '3']2、sys.path返回模塊的搜索路徑,從當前文件所在路徑開始搜索>>> sys.path['', 'D:\\Software\\python36.zip', 'D:\\Software\\DLLs', 'D
  • python應用(2):寫個python程序給自己用
    然而很多人,特別是不懂程序的人,更需要看到的是一個有界面的,能通過滑鼠操作的程序,畢竟已經邁進「窗口」的時代,雖然Dos還存在。所以,怎麼用python弄出有界面的程序呢?界面也是一個工具,所以,有沒有界面工具庫呢?
  • python 模塊導入詳解
    而在一些大型的工程中,如果不通過一定的方式管理好包的導入,則各文件之間的導入非常混亂,極易出錯。對於該工程包的外部調用者來說,如果調用的路徑太深或者太亂,都很不友好。下面構造一個package目錄,後續所有例子都根據該結構來進行解釋和說明。
  • 別用 os.path 了!
    /usr/bin/env python3\n'In [56]: p = Path("/Users/aaron/tmp/c.py")In [57]: p.stat()Out[57]: os.stat_result(st_mode=33188, st_ino=35768389, st_dev=16777221
  • Python+requests接口自動化測試框架實例詳解教程
    我們利用xml.etree.Element來對xml文件進行操作,然後通過我們自定義的方法,根據傳遞不同的參數取得不(想)同(要)的值。利用xlrd來操作excel文件,注意啦,我們是用excel文件來管理測試用例的。聽起來會不會有點兒懵,小編剛學時也很懵,看文件就好理解了。excel文件: