点击上方蓝色小字,关注“涛哥聊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 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=0for 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+=1return 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]#保存关闭writerwriter.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.columnsdata1.reset_index(drop=True,inplace=True)#刷新数据源refresh_data(check_file,"数据源",data1)return Nonefile_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)

-END-

一个月不走弯路快速入门学python和python数据分析路线,呕心沥血加班加点做了2天,一共63页,该课件讲的都是路线中的核心知识,今天把该PPT分享给大家,能根据该课件提到的知识有针对性的学,做到真正的少走弯路,课件部分截图如下

PPT领取:

扫描下方公众号回复:PPT

获取下载链接

python管理文件神器 os.walk相关推荐

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

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

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

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

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

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

  4. Python管理文件神器,初学者必备!

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

  5. Python遍历目录下的文件(os.walk 、os.listdir的用法)

    Python遍历目录下的文件(os.walk .os.listdir的用法) 最近想从一个目录转移一些文件到另外一个目录,因为文件有指定的后缀,所以想着用python来转移,不做cv工程师,那就涉及到 ...

  6. python 文件操作 os.walk() 方法

    all = os.walk(source_txt_path)# dirpath:从all中存储的source_txt_path下文件夹及子文件夹列表中取出每个文件夹及子文件夹路径 # dirnames ...

  7. python︱批量操作文件(os)、图片操作技巧(下载网络图片、skimage.io)

    文章目录 @[toc] . 一.遍历操作文件 1.文件名字获取 **注意,不能`import glob` ,不然就会报错:** 2.批量重命名文件os.rename 直接修改了上级目录,test2.t ...

  8. 02-02 Python 读写文件 open|os|sys

    open Python open() 函数 常用技巧: with open(path, encoding="utf-8") as file:data = yaml.safe_loa ...

  9. [转载] python 简单示例说明os.walk和os.path.walk的不同

    参考链接: 示例说明Python2.x和Python3.x之间的重要区别 import os,os.path def func(arg,dirname,names): for filespath in ...

最新文章

  1. Linux下巧妙使用邮件服务器之postfix(认证+web)
  2. 华强北耳机为啥老是有人翻车?
  3. matlab求傅里叶级数展开式_明明学过积分和三角函数就能秒理解傅里叶变换.........
  4. codeforces 1220E
  5. Facebook 又摊上事了,数亿用户被波及!
  6. 19复变函数的积分(五)
  7. [Node.js]操作redis
  8. string entitlement = Application.dataPath+ “/Editor/Entitle Unity工程到处iOS工程,用脚本把Push Notifications打开
  9. 阿里云服务器被攻击了怎么办?
  10. 微信为什么不禁拼多多?诱导分享到底怎么判
  11. 中国金茂上线电子签名,加速地产业务数字化
  12. 微星MSI新笔记本外接耳机没有声音?完美解决
  13. 测试工程师常见面试题
  14. C++播放音乐和MFC的messagebox用法
  15. CloudXNS:关于X优化灵敏度的理解
  16. S7-1200定时器
  17. sap2000计算带对撑梁的井形结构(水池)
  18. 脚本图片循环识别执行可设置热键
  19. 微信小程序(二)-- 项目实战
  20. 高手日志终结篇:我所知道的那些马丁策略(下篇)

热门文章

  1. PIC单片机SPI接口配置
  2. 西安建筑科技大学计算机类专业怎么样,西安建筑科技大学优势专业排名,2021年西安建筑科技大学最好的专业排名...
  3. STM32之TIM定时器
  4. Photoshop CC堆栈教程—如何使用pscc堆栈模式打造油彩天空?
  5. 搜狗图片页面爬虫脚本,批量下载图片
  6. “站队阿里”的七牛云劳动节向美递交招股说明书:Q1亏损1199万元,毛利率下跌至23%
  7. 篮茑中文编程开发的APP与VFP混搭,一个字“稳”
  8. 【matlab专题】脚本(3)DBC--EXCEL--模型:通过表格数据生成指定的模型(二)
  9. 确认过眼神!斐讯K2P千兆路由是我想要的
  10. 老师让我实现一个基于SSM的在线租房系统