【导语】:有没有想过用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 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’]


现在的目录: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 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输出某个目录下的所有文件

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 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管理文件神器,初学者必备!相关推荐

  1. python管理文件神器 os.walk

    点击上方蓝色小字,关注"涛哥聊Python" 重磅干货,第一时间送达 来源:诡途 https://blog.csdn.net/qq_35866846/article/details ...

  2. 用python写一个文件管理程序下载_Python管理文件神器 os.walk

    原标题:Python管理文件神器 os.walk 来自:CSDN,作者:诡途 [导语]:有没有想过用python写一个文件管理程序?听起来似乎没思路?其实是可以的,因为Python已经为你准备好了神器 ...

  3. python excelwriter保存路径_python管理文件神器 os.walk

    点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 来源:诡途 https://blog.csdn.net/qq_35866846/a ...

  4. python中的管理文件神器 os.walk

    有没有想过用python写一个文件管理程序?听起来似乎没思路?其实是可以的,因为python已经为你准备好了神器os.walk,进来看看吧! python中os.walk是一个简单易用的文件.目录遍历 ...

  5. python len函数_Python 初学者必备的常用内置函数

    Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间.目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很常见,这里 ...

  6. Quicker:Windows 办公效率神器 | 初学者必备(一)

    一种便捷的windows管理软件 一.Quicker介绍及安装 1.1 Quicker介绍 1.2 Quicker下载及安装 1.2.1 Quicker下载 1.2.2 Quicker安装 二.Qui ...

  7. oracle必备文件,oracle初学者必备基础

    oracle 基础 ............................................[@more@] 51.如何将小表放入keep池中? alter table xxx sto ...

  8. 经典的python入门书籍,每位初学者必备书籍

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  9. python写文件追加 按行追加_Python3 自学第14天:文件操作,文件句柄,上下文管理器...

    前面我们了解了Python的异常处理和自定义异常,今天我们了解下Python的文件操作: 首先Python对文件的处理并不是直接操作的,而是去调用操作系统接口方法间接操作文件的,这样做的目的是为了确保 ...

最新文章

  1. 关于spring cloud 各种组件的停更/升级/替换
  2. MariaDB存储引擎简介
  3. 如何处理postman Self-signed SSL certificate blocked错误
  4. 区分 JSON 字符串与JSON对象
  5. Zen Cart 常用SQL命令
  6. java批量导入和批量删除_MyBatis 实现批量插入和删除中双层循环的写法案例
  7. centos7 怎么封装自己的镜像_在Centos7系统上制作一个7系的Docker镜像
  8. webpack多页面构建优化不完全指北
  9. 倒车雷达C语言程序,基于单片机汽车倒车雷达系统设计(含程序).doc
  10. 固态硬盘故障检测_有哪些好用的检测软件是用于判断固态硬盘故障的?
  11. Mybatis事务隔离级别
  12. 浅谈游戏商业化(一)
  13. keil中断函数的写法_中断函数写法的比较
  14. 微信H5页保存当前页面为图片踩坑
  15. 地理信息系统(GIS)的发展历程
  16. python request 报错 #No JSON object could be decoded
  17. 记录一次canvas小白做相册功能的过程
  18. 增量式旋转编码器的使用,以arduino为例
  19. Latex常用语法、语句、工具
  20. 时间管理(番茄时钟工作法)

热门文章

  1. 苹果手机投影_苹果12pro有没有指纹解锁 带屏下指纹解锁具体说明
  2. mysql经典50题(练习)
  3. 2023年蓝牙耳机如何挑选?不同价格蓝牙耳机推荐
  4. 动态二维码生成器PHP Dynamic QRcode
  5. 使用grafana监控mongodb
  6. java插件更新,重磅更新!Rserver 插件 for TBtools
  7. android 杀死程序收不到推送_Android APP切换到后台接收不到推送消息
  8. 视频占据太多内存,如何快速压缩视频大小
  9. querylist安装与使用
  10. 到底什么是Upnp?[转载]