Hi~ 大家好!
本文讲解一些我在生活中遇到或者想到的内容,其中一些操作如果一个一个的进行,会很累,所以本文用python进行简化操作,节省时间。本文会用到os
、shutil
以及pandas
模块,其中os
和shutil
本文会交叉使用,进行互补。
本次示例数据就不用猫眼电影100了,换个新的,一份前员工名单:
以及一份离职员工信息:
创建文件
导入模块
代码语言:javascript复制import pandas as pd
import os
import shutil
先创建单个文件夹,判断文件夹是否存在,不存在则创建单个文件夹,后面的案例都在该文件夹中进行:
代码语言:javascript复制if not os.path.exists('员工档案'):
os.mkdir('员工档案')
那如何在一级文件夹中按指定名称创建多个文件夹呢?可以先导入需要创建文件夹的名称,接着进行循环取值:
代码语言:javascript复制df = pd.read_csv('员工名单.csv', encoding='utf-8')
for i in df['姓名']:
if not os.path.exists('./员工档案/' i):
os.mkdir('./员工档案/' i)
而如果需要在二级文件夹里面继续创建文件,用os.mkdir
他会报错:
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: './员工档案/丑八怪/丑八怪'
所以需要用os.makedirs进行创建:
df = pd.read_csv('员工名单.csv', encoding='utf-8')
for i in df['姓名']:
path = './员工档案/' i '/' i
if not os.path.exists(path):
os.makedirs(path)
当然,一般很少会创建三级文件夹的,但会在二级文件夹里面创建一些其它文件。但你会发现,os他只能创建文件夹,而无法直接创建其它类型的文件;所以在此条件下我们要在二级文件夹里面创建其它文件,我们需要借用其它的模块;这里以创建excel表格为例,需要用到pandas
模块:
df = pd.read_csv('员工名单.csv', encoding='utf-8')
for i in df['姓名']:
path = './员工档案/' i '/'
if not os.path.exists(path):
os.makedirs(path)
df1 = pd.ExcelWriter(path f'{i}.xlsx')
df1.close()
在这里插入图片描述
移动文件以及重命名文件
移动单个文件并且重命名可以用os.rename(src, dst)
,src和dst为两个路径,分别表示重命名之前和之后的路径,但需要注意的是:移动时必须重命名,否则会报错。
os.rename('./员工档案/丑八怪', './员工档案/乌鸦/丑八啊啊')
而只需要移动可以用上面的shutil
模块中的move
函数:
shutil.move('./员工档案/乌鸦', './员工档案/丑八怪')
而如果需要把二级文件夹中的excel文件移动到一级文件夹下,应该进行以下操作:
代码语言:javascript复制for e in os.listdir('./员工档案'): # 取出一级文件夹下的所有文件名称
for i in os.listdir(f'./员工档案/{e}'): # 取出二级文件夹下的所有文件名称
shutil.move(f'./员工档案/{e}/{i}', './员工档案')
如果你要移动文件且重命名,可以在shutil.move
中或者把shutil.move
更改为os.rename
,并在移动后的路径中增加修改字样:
shutil.move(f'./员工档案/{e}/{i}', './员工档案/2021_{i}')
os.rename(f'./员工档案/{e}/{i}', f'./员工档案/2021_{i}')
删除文件
删除单个文件夹,可以直接用shutil
的rmtree
函数,而os
他只能删除空的文件夹:
shutil.rmtree('员工档案')
如果员工档案中,某些员工已经离职,需要删除其对应的文件,或者删除一些不需要的文件:
则依然使用个for循环即可:
代码语言:javascript复制df = pd.read_csv('离职员工.csv', encoding='utf-8')
for i in df['姓名']:
shutil.rmtree(f'./员工档案/{i}')
那么如何快速的从二级文件夹中删除离职员工对应的excel文件:
这时你如果直接用shutil.rmtree
他是删除不了一个文件的,而os
虽然无法删除有文件的目录,但他可以直接删除一个文件:
df = pd.read_csv('离职员工.csv', encoding='utf-8')
for i in df['姓名']:
if os.path.exists(f'./员工档案/{i}'): # 需要判断是否存在文件
for e in os.listdir(f'./员工档案/{i}'): # 取出文件夹中的文件名称
os.remove(f'./员工档案/{i}/{e}')