日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

有沒有想過用Python/ target=_blank class=infotextkey>Python寫一個文件管理程序?聽起來似乎沒思路?其實是可以的,因為python已經為你準備好了神器os.walk,進來看看吧!

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

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

一、 基本介紹

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

二、 基本使用

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

python中的這個庫居然是一個管理文件的神器

 

2.1掃描所有文件

掃描內容:

子文件夾和文件

子文件夾下的文件

輸出內容:

文件夾名稱/文件名稱

掃描路徑:

自頂向下 topdown=True(默認)
?
自底向上 topdown=False

碼字不易廢話兩句:有需要學習資料的或者有技術問題交流可以私信小編發送“01”即可

from os import walk
path="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']
********************
現在的目錄:datatestA
該目錄下包含的子目錄:[]
該目錄下包含的文件:['2020-07-12-A.xlsx', '2020-07-13-A.xlsx', '2020-07-14-A.xlsx']
********************
現在的目錄:datatestB
該目錄下包含的子目錄:[]
該目錄下包含的文件:['2020-07-12-B.xlsx', '2020-07-13-B.xlsx', '2020-07-14-B.xlsx']
********************
現在的目錄:datatestC
該目錄下包含的子目錄:[]
該目錄下包含的文件:['2020-07-12-C.xlsx', '2020-07-13-C.xlsx', '2020-07-14-C.xlsx']
********************

自底向上掃描結果:

現在的目錄:datatestA
該目錄下包含的子目錄:[]
該目錄下包含的文件:['2020-07-12-A.xlsx', '2020-07-13-A.xlsx', '2020-07-14-A.xlsx']
********************
現在的目錄:datatestB
該目錄下包含的子目錄:[]
該目錄下包含的文件:['2020-07-12-B.xlsx', '2020-07-13-B.xlsx', '2020-07-14-B.xlsx']
********************
現在的目錄:datatestC
該目錄下包含的子目錄:[]
該目錄下包含的文件:['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 os
path="data"
for curDir, dirs, files in os.walk(path):
    for file in files:
        print(os.path.join(curDir, file))
data2020-07-12 - 第一層.xlsx
data2020-07-13 - 第一層.xlsx
data2020-07-14 - 第一層.xlsx
datatestA2020-07-12-A.xlsx
datatestA2020-07-13-A.xlsx
datatestA2020-07-14-A.xlsx
datatestB2020-07-12-B.xlsx
datatestB2020-07-13-B.xlsx
datatestB2020-07-14-B.xlsx
datatestC2020-07-12-C.xlsx
datatestC2020-07-13-C.xlsx
datatestC2020-07-14-C.xlsx

輸出指定類型文件

#endswith 截取文件后綴
import os
path="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 os
path="data"
for curDir, dirs, files in os.walk(path):
    for _dir in dirs:
        print(os.path.join(curDir, _dir))
datatestA
datatestB
datatestC

三、案例代碼

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

import pandas as pd
import numpy as np
import os,openpyxl
#移動符合條件文件,并刪除二級文件夾和多余文件
def 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")
    
    #在ExcelWriter的源代碼中,它初始化空工作簿并刪除所有工作表,
    #writer.book = book將原來表里面的內容保存到writer中
    writer.book=book
    
    #activate激活指定sheet工作表
    ws=book[sheet_name]
    
    #清空當前活動表數據
    for row in ws.iter_rows():
        for cell in row:
            cell.value=None
    
    #dataframe行列數
    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
    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] 
    
    #標題columns放到dataframe中
    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"
#日期格式:xxxx-xx eg:2020-07-01
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_date
try:
    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)

以上就是小編今天為大家帶來的內容

分享到:
標簽:python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定