如何用python写一个文件管理程序
不知道大家有没有想过用python写一个文件管理程序?听起来似乎没思路?其实是可以的,因为Python已经为你准备好了神器os.walk,一起来试试吧!
Python中os.walk是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。
本文将详细介绍os.walk模块,最后使用os.walk模块实现一个在指定日志整理文件的程序。
1、基本介绍
os.walk():扫描某个指定目录下所包含的子目录和文件,返回的是一个迭代器。
2、基本使用
假设文件夹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)
如何用python写一个文件管理程序相关推荐
- 用python写一个文件管理程序下载_Python管理文件神器 os.walk
原标题:Python管理文件神器 os.walk 来自:CSDN,作者:诡途 [导语]:有没有想过用python写一个文件管理程序?听起来似乎没思路?其实是可以的,因为Python已经为你准备好了神器 ...
- 手机版python3h如何自制游戏_教你如何用 Python 写一个小游戏
教你如何用 Python 写一个小游戏 引言 最近 python 语言大火, 除了在科学计算领域 python 有用武之地之外, 在游戏后台等方面, python 也大放异彩, 本篇博文将按照正规的项 ...
- 如何用python写一个计算日期间隔的程序?
如何用python写一个计算日期间隔的程序? 文章目录 如何用python写一个计算日期间隔的程序? 前言 问题梳理 问题解决 写在后面 前言 为什么想起来写一个这样的程序呢? 前几天聊天的时候,突然 ...
- python 题库自动答题,自动匹配题库_如何用python写一个从题库自动匹配的答题脚本_淘题吧...
A. web数据库题目:根据用户输入的用户名和密码于数据库中的记录是否匹配制作一个用户登录模块 http://blog.csdn.net/love_leve/article/details/43226 ...
- 如何用Python判断一个文件是否被占用?
今天有同学问,用os模块的access()能否判断一个文件是否被占用?直觉上,这是行不通的,因为access()返回的是文件的读写属性.为了确认这一点,我简单测试了一下. >>> i ...
- 贪吃蛇博弈算法python_算法应用实践:如何用Python写一个贪吃蛇AI
原标题:算法应用实践:如何用Python写一个贪吃蛇AI 前言 这两天在网上看到一张让人涨姿势的图片,图片中展示的是贪吃蛇游戏, 估计大部分人都玩过.但如果仅仅是贪吃蛇游戏,那么它就没有什么让人涨姿势 ...
- [译] 如何用 Python 写一个 Discord 机器人
原文地址:How to write a Discord bot in Python 原文作者:Junpei Shimotsu 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/go ...
- python爬虫抢火车票_如何用python写一个简单的12306抢票软件|python 爬火车票 教程...
python 如果抓取验证码图片 类似12306的登录验证码图片 这个以前做次.最大的麻烦是码的识别算法的识别率太低.12306那种网站登陆错3次就限制你20分钟.所以除非你有33%以上的识别率否则不 ...
- python解析器是什么_如何用python写一个简单的词法分析器
编译原理老师要求写一个java的词法分析器,想了想决定用python写一个. 目标 能识别出变量,数字,运算符,界符和关键字,用excel表打印出来. 有了目标,想想要怎么实现词法分析器. 1.先进行 ...
最新文章
- oracle驱动程序包的安装失败,Maven 、oracle的jdbc的jar包下载失败
- NHibernate 错误
- 数据结构与算法 —— 二叉树
- mysql删除重复记录
- mysql proxy读写分离实现_使用mysql-proxy实现读写分离
- android遥控器按键传输流程,android 海思平台遥控器按键映射流程
- Python大神告诉你,学习Python应该读哪些书!
- ipad如何连接电脑_电脑无法连接外网远程调试,一文教你如何用手机让台式机连接外网...
- Python开发工程师常见的面试题及答案分享,记得收藏哈!
- calling c++ from golang with swig--windows dll(一)
- Vue.js 条件渲染 v-if、v-show、v-else
- 剑指offer面试题[64]-数据流中的中位数
- Python元组 ()
- JavaScript实现简易计算器
- 单机java游戏2D冒险_那些年,我们一起追的2D横版过关单机游戏
- 餐厅预订APP多少钱一套?餐厅预订APP如何收费?
- 权威发布:《麻省理工科技评论》2020年“全球十大突破性技术”
- cf1677C. Tokitsukaze and Two Colorful Tapes(div1)
- wish商户平台登录网址中国版【wish圈】
- 华为交换机日志格式和级别说明
热门文章
- 前端常用编辑器的快捷键
- 对学校的希望和寄语_对学校寄语怎么写
- 技术宅男既要提升编程技术也要加强沟通能力
- php mysql 物流_基于PHP的快递查询系统的设计与实现(MySQL)(含录像)
- 20190416 关于学历
- 苹果渠道变化不断,应用上架面对审核高发问题该如何解决
- 腾讯出行在微信内测试打车功能;​微软Teams全球宕机数小时后恢复正常;iOS 15.6 修复显示储存空间已满问题|极客头条
- 或是独体字吗_什么叫做独体字?比如那些字是……
- vue 路由页面缓存
- 如何查看内存条是第几代的