九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Python管理文件神器 os.walk

文章轉(zhuǎn)自:Python編程

有沒(méi)有想過(guò)用python寫一個(gè)文件管理程序?聽(tīng)起來(lái)似乎沒(méi)思路?其實(shí)是可以的,因?yàn)镻ython已經(jīng)為你準(zhǔn)備好了神器os.walk,進(jìn)來(lái)看看吧!

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

本文將詳細(xì)介紹os.walk模塊,最后使用os.walk模塊實(shí)現(xiàn)一個(gè)在指定日志整理文件的程序。

1、基本介紹

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

2、基本使用

假設(shè)文件夾data有如下的目錄結(jié)構(gòu)(cmd 命令:tree /f)

「2.1掃描所有文件」

掃描內(nèi)容:

  • 子文件夾和文件

  • 子文件夾下的文件

輸出內(nèi)容:

  • 文件夾名稱/文件名稱

掃描路徑:

  • 自頂向下 topdown=True(默認(rèn))

  • 自底向上 topdown=False

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

自頂向下掃描結(jié)果:

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

自底向上掃描結(jié)果:

現(xiàn)在的目錄:data\testA
該目錄下包含的子目錄:[]
該目錄下包含的文件:['2020-07-12-A.xlsx''2020-07-13-A.xlsx''2020-07-14-A.xlsx']
********************
現(xiàn)在的目錄:data\testB
該目錄下包含的子目錄:[]
該目錄下包含的文件:['2020-07-12-B.xlsx''2020-07-13-B.xlsx''2020-07-14-B.xlsx']
********************
現(xiàn)在的目錄:data\testC
該目錄下包含的子目錄:[]
該目錄下包含的文件:['2020-07-12-C.xlsx''2020-07-13-C.xlsx''2020-07-14-C.xlsx']
********************
現(xiàn)在的目錄: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))

data\2020-07-12 - 第一層.xlsx
data\2020-07-13 - 第一層.xlsx
data\2020-07-14 - 第一層.xlsx
data\testA\2020-07-12-A.xlsx
data\testA\2020-07-13-A.xlsx
data\testA\2020-07-14-A.xlsx
data\testB\2020-07-12-B.xlsx
data\testB\2020-07-13-B.xlsx
data\testB\2020-07-14-B.xlsx
data\testC\2020-07-12-C.xlsx
data\testC\2020-07-13-C.xlsx
data\testC\2020-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輸出某個(gè)目錄下的所有文件
import os
path='data'
for curDir, dirs, files in os.walk(path):
    for _dir in dirs:
        print(os.path.join(curDir, _dir))

data\testA
data\testB
data\testC

「案例代碼」

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

import pandas as pd
import numpy as np
import os,openpyxl
#移動(dòng)符合條件文件,并刪除二級(jí)文件夾和多余文件
def move_file(file_path,_new_path,date_xl_str):

    #本月文件移動(dòng)至對(duì)應(yīng)新建文件夾,非本月文件直接刪除
    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

#更新數(shù)據(jù)源
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將原來(lái)表里面的內(nèi)容保存到writer中
    writer.book=book

    #activate激活指定sheet工作表
    ws=book[sheet_name]

    #清空當(dāng)前活動(dòng)表數(shù)據(jù)
    for row in ws.iter_rows():
        for cell in row:
            cell.value=None

    #dataframe行列數(shù)
    idx_num,col_num=data.shape

    #新數(shù)據(jù)寫入當(dāng)前活動(dòng)表-注意索引偏移
    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]

    #保存關(guān)閉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

    #標(biāo)題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)

    #刷新數(shù)據(jù)源
    refresh_data(check_file,'數(shù)據(jù)源',data1)

    return None

file_path='data'
#日期格式:xxxx-xx eg:2020-07-01
start_date=input('請(qǐng)輸入開(kāi)始日期:')
end_date=input('請(qǐng)輸入開(kāi)始日期:')

#生成日期區(qū)間-字符串類型
date_xl_str=[str(i)[:10for i in pd.date_range(start_date,end_date,freq='D')]

#創(chuàng)建指定文件夾
new_path=start_date+'~'+end_date
try:
    os.mkdir(new_path)
except:
    print('文件夾 【%s】 已存在'%new_path)

#移動(dòng)符合條件文件,并刪除二級(jí)文件夾和多余文件
move_file(file_path,new_path,date_xl_str)

#文件去重
num=qch_date(new_path)
print('去除重復(fù)文件 %s 個(gè)'%num)

#文件檢查
check_file(new_path)

(完)
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用Python批量復(fù)制源目錄下的所有Excel文件復(fù)制到目標(biāo)目錄中
Python自動(dòng)打開(kāi)文件夾,并定位到指定文件或打開(kāi)指定文件之os模塊
Python中os.walk()的使用方法
利用Python讀取文件名及批量修改文件名
如何判斷文件或目錄是否存在(python)
用python實(shí)現(xiàn)批量重命名文件的代碼
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服