美文网首页
管理文件神器 os.walk

管理文件神器 os.walk

作者: 木叶苍蓝 | 来源:发表于2020-11-03 13:29 被阅读0次

导语:有没有想过用Python写一个文件管理程序?听起来似乎没思路?其实是可以的,因为Python已经为你准备好了神器os.walk,进来看看吧

Python中os.walk是一个简单易用的文件和目录遍历器,可以帮助我们高效的处理文件,目录方面的事情。
本文将详细介绍os.walk模块,最后使用os.walk模块实现一个在指定日志整理文件的程序。

基本介绍

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

基本使用

假设文件夹 data 有如下的目录结构(cmd命令:tree /f)


目录结构.png
扫描所有文件

扫描内容:

  • 子文件夹和文件
  • 子文件夹下的文件

输出内容:

  • 文件夹名称 / 文件名称

扫描路径:

  • 自顶向下 topdown = True(默认)
  • 自底向上 topdown = False
from os import walk

path = "data"
# for curDir, dirs, files in walk(path, topdown=False):
for curDir, dirs, files in walk(path):
    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', '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']
********************
扫描输出所有文件的路径

输出所有文件:

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")]
扫描输出所有的子目录
# 使用 os.walk 输出某个目录下的所有文件
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
案例代码

综合运用 os.walk() 文件指定日期整理程序

import os
import openpyxl
import numpy as np
import pandas as pd

# 移动符合条件文件,并删除二级文件夹和多余文件
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_patg = 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, colum=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([wi.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"
# 日期格式 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)

相关文章

  • 管理文件神器 os.walk

    导语:有没有想过用Python写一个文件管理程序?听起来似乎没思路?其实是可以的,因为Python已经为你准备好了...

  • python 剪切移动文件

    扫描某文件夹下所有文件(包括子文件夹中的文件),使用os.walk;os.walk() 方法用于通过在目录树种游走...

  • Python常规处理excel文件

    1. os.walk() :遍历制定文件夹下的所有文档 os.walk(): 返回Directory tree ...

  • Python获取目录下文件的方法

    本文采用os.walk()和os.listdir()两种方法,获取指定文件夹下的文件名。 一、os.walk() ...

  • Python3好用的原生api

    读取特定目录下所有的文件夹, 和文件名os.walk() os.walk("./")是我最喜欢的api之一, 作用...

  • OS常用方法总结

    1. os.walk os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方...

  • Python os.walk() 方法

    Python os.walk() 方法 概述 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,...

  • [Python] os 模块

    os.walk() 方法 os.walk() 方法用于通过在目录树种游走输出在目录中的文件名,向上或者向下。语法格...

  • 文献/文件管理终极必杀技,竟然是它……

    资料太多找不到,借助文件名标签管理神器轻松搞定适合文件管理,文献管理,以及各式各样的资料管理。 学习也好,工作也罢...

  • Python目录遍历 os.walk

    一. 概述 os.walk() 方法用于通过在目录树中游走,输出在目录中的文件名,以及子目录名。 os.walk(...

网友评论

      本文标题:管理文件神器 os.walk

      本文链接:https://www.haomeiwen.com/subject/lztmvktx.html