前言
之前菜鸟小白给大家分享过一次文件处理器的编码,我发现有一些粉丝私信我一些关于文件处理的问题,今天就给大家再梳理一遍文件处理的几个方法,大家记得自己验证收藏哦。
01遍历文件夹
我们要对文件进行处理,不可避免的问题就是在一个文件夹中找到自己的需要处理的文件,这就需要我们对文件夹中的文件进行遍历。使用python自带的OS模块就可以轻松遍历文件夹,os.walk遍历后产生三个参数:
- 当前文件夹路径
- 包含文件夹名称(列表形式)
- 包含文件名称(列表形式)
代码如下,大家可以根据自己的路径进行修改
import os
for path, names, filenames in os.walk(r'E:\\gongzhonghao\\20210512'):
print(f'打开文件夹:"{path}"') # 当前文件夹路径
if names:
print(names) # 包含文件夹名称[列表形式]
if filenames:
print(filenames) # 包含文件名称[列表形式]
print('-'*10)
当手上的需求明确有获取给定路径各级文件夹下所有符合条件的文件,并进行相应的批处理操作时,即可使用 os.walk
02获取路径中的文件名
os.path.basename可以直接从给定的路径中获取到最后的文件名称
##获取文件名
path = 'E:\\gongzhonghao\\20210512\\test.py'
print(os.path.basename(path))
03判断是否为文件
通过一行代码就能够判断给定的路径是文件还是文件夹路径
##判断是否为文件
path = 'XXX'
print(os.path.isfile(path))
这个函数还可以用来判断指定文件是否存在,只需要将path内容设置为文件绝对地址,若不存在则会返回False
04获取桌面路径
我们经常也会遇到需要获取桌面路径的操作,可以使用如下语句直接获取桌面的绝对路径
##获取桌面路径
print(os.path.join(os.path.expanduser("~"), 'Desktop'))
这样能够直接将数据放在桌面上,在不同环境中都可以运行处理
05创建文件夹
我们还有一个非常非常常见的操作就是创建文件夹,不管是存储过程数据,还是存储日志记录都需要遇到。我们使用os.mkdir函数就可以了
#创建目录
path = 'test1'#创建的子文件夹名称
os.mkdir(path)
上面程序默认会在当前程序所在目录下创建子文件夹,若需要在其他文件夹下创建子文件夹,需要将path赋值为绝对路径
##创建目录
F_path='E:\\gongzhonghao\\20210512'#目标文件夹,需要在此文件夹下创建子文件夹
path='test'#创建的子文件夹名称
os.mkdir(F_path '\\' S_path)
创建文件还有遇到一种情况就是我设定的文件夹名称已经存在的话,使用上面的代码就会报错。为了避免这种情况发生,我们一般在创建文件夹之前都会判断文件夹是否已经存在
path='test1'#创建的子文件夹名称
if not os.path.exists(path):
os.mkdir(path)
06重命名
有时候我们还需要对文件或者文件名进行重命名,这就需要用到os.rename方法
##重命名
os.rename('test.txt', 'test1.txt') # 重命名文件
os.rename('test1', 'test2') # 重命名文件夹
07移动文件/文件夹
移动文件和文件夹需要使用的是shutil.move
importshutil
##移动文件夹或者文件
shutil.move(r'E:\\gongzhonghao\\20210512\\test', r'E:\\gongzhonghao\\20210512\\test2')
shutil.move(r'.\test.txt', r'.\new.txt')
需要注意的是,上面代码的效果是剪切效果。另外python中‘.\’代表着脚本所在的当前目录。
08复制文件
那如果我们需要完成复制文件的操作应该怎么做呢?具体如下:
##复制文件并且对文件进行重命名
shutil.copyfile(r'.\test2\\new.txt',r'.\test.txt')
需要注意的是shutil.copyfile只能复制文件,第二个参数目标文件名如何与原文件名不一致,则拷贝到目标路径后进行改名操作。
结束语
好了,以上就是我为大家整理的八个常用的文件或者文件夹操作,大部分都是可以通用的,大家可以收藏本文,并在需要进行相关操作的时候可以直接复制粘贴使用。
另外也希望大家在自己写代码、读别人代码时,可以多去思考哪些函数/代码片段是可以为我所用,这样才会进步的更快!