快速整理文件——使用Python遍历文件
案例
鸽子忘记自己的mp3文件存储在哪些地方了,想将它们都找出来并整理。
利用os.walk
方法遍历目录(D盘),然后将它们都保存到一个文件夹下:
import os
import shutil
import pathlib
from tqdm import tqdm
search_path = "D:/" # 查找D盘
store_path = "D:/音乐"
#如果sotre_path不存在则创建目录。
pathlib.Path(store_path).mkdir(parents=True, exist_ok=True)
for dirpath, dirnames, filenames in tqdm(os.walk(search_path)):
if dirpath == store_path:
print(f"跳过{store_path}")
continue
for filename in filenames:
if filename.endswith(".mp3"):
f = os.path.join(dirpath, filename)
file_size = os.path.getsize(f)
if file_size > 2**20: # 文件大小超过1MB(2**20B)
print(f, file_size)
dst = os.path.join(store_path,filename)
shutil.copyfile(f, dst) # 复制到目标文件夹下
注:tqdm用来显示进度,如果没有安装tqdm,可以先安装tqdm:
python -m pip install tqdm
下面简单介绍一下用到的库:
os 库
标准库,提供与操作系统相关的功能。例如 文件名、环境变量、进程相关操作。
https://docs.python.org/zh-cn/3/library/os.html
通常很少使用os库,就像文档开头说的:如果你只是想读写一个文件,请参阅 open();如果你想操作文件路径,请参阅 os.path
模块;如果你想读取通过命令行给出的所有文件中的所有行,请参阅 fileinput
模块。为了创建临时文件和目录,请参阅 tempfile
模块;对于高级文件和目录处理,请参阅 shutil
模块。
os.walk
这里介绍一下 os.walk
os.walk(top, topdown=True, onerror=None, followlinks=False)
https://docs.python.org/zh-cn/3/library/os.html#os.walk 官方文档说得比较繁琐,可以直接看下面的例子:
例子
import os
search_path = r'D:\资料'
for dirpath, dirnames, filenames in os.walk(search_path):
print(f"dirpath={dirpath}, dirnames={dirnames}, filenames={filenames}")
目录如下:
运行代码输出:
dirpath=D:\资料, dirnames=['电子书', '表格'], filenames=['资料说明.txt']
dirpath=D:\资料\电子书, dirnames=['精选电子书'], filenames=['a.txt', 'b.txt']
dirpath=D:\资料\电子书\精选电子书, dirnames=[], filenames=['精品.txt']
dirpath=D:\资料\表格, dirnames=[], filenames=['表格1.xlsx', '表格2.xlsx']
os.walk
是递归地向下遍历(深度优先遍历),访问所有的文件夹。每次遍历返回一个三元组dirpath, dirnames, filenames
。
dirpath
是当前访问的路径, dirnames
是路径下的文件夹(列表), filename
是路径下的文件(列表)。
在本例中,访问的路径依次是:
-->资料 -->资料->电子书 -->资料->电子书->精选电子书 -->资料->表格
shutil库
标准库,与文件操作相关。 https://docs.python.org/zh-cn/3/library/shutil.html
shutil.copyfile(src, dst, *, follow_symlinks=True)
将名为 src
的文件的内容(不包括元数据(元数据是文件大小、修改时间等信息))拷贝到名为 dst
的文件并以尽可能高效的方式返回 dst
。
src
和 dst
均为路径类对象或以字符串形式给出的路径名。
如果要拷贝目录,可能要用到copytree
:
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False)
将以 src
为根起点的整个目录树拷贝到名为 dst
的目录并返回目标目录。 dirs_exist_ok
表示是否允许 dst
已存在或父目录缺失。
shutil.move(src, dst, copy_function=copy2)
递归地将一个文件或目录 (src
) 移至另一位置 (dst
) 并返回目标位置。
小结
使用os.walk可以遍历文件夹,结合其它的一些库(shutil),可以很方便地操作文件。如果需要对文件内容进行判断,还可以进一步处理。
相关文章
- pycharm创建第一个程序_python创建新文件
- python移动app开发_神奇的Kivy,让Python快速开发移动app
- python解压bz2文件命令,在Python中解压缩.bz2文件
- Python入门系列(十)一篇学会python文件处理
- Python 实现单例模式的五种写法
- python截图识别文字_Python文字截图识别OCR工具实例解析
- python最好的开发工具_Python编译器
- 【说站】python字典合并有哪些规范?
- 【说站】Python中deque的操作整理
- 网工Python之路之paramiko 模块实验(七)回显保存成文件,Win中处理空行
- python自动关闭文件
- Python 处理Excel总结
- python如何读取sql文件_sql数据库常用命令
- 【python】读取csv xlsx xlx txt文件 类
- 如何利用Python批量重命名PDF文件
- 【测试开发】python系列教程:Python 运算符
- 这里有11种方法,供你用python下载文件
- 【python实操】安装软件时候选择文件安装目录模块的实现方法
- Python操作Execl 实现自动化填表详解编程语言
- python分割文件详解编程语言
- android apk 一键生成混淆文件python脚本分享详解编程语言
- Python开发系列课程(0) – 课程预告详解编程语言
- Python实现Oracle数据库连接(python连接oracle数据库)
- python读文件逐行处理的示例代码分享
- python判断windows隐藏文件的方法
- python中遍历文件的3个方法