前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中几秒钟就能批量处理文件的几种操作!最后一种很常见!

python中几秒钟就能批量处理文件的几种操作!最后一种很常见!

作者头像
Python与Excel之交
发布2021-08-05 15:31:00
9250
发布2021-08-05 15:31:00
举报
文章被收录于专栏:Python与Excel之交

Hi~ 大家好!

本文讲解一些我在生活中遇到或者想到的内容,其中一些操作如果一个一个的进行,会很累,所以本文用python进行简化操作,节省时间。本文会用到osshutil以及pandas模块,其中osshutil本文会交叉使用,进行互补。

本次示例数据就不用猫眼电影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他会报错:

代码语言:javascript
复制
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: './员工档案/丑八怪/丑八怪'

所以需要用os.makedirs进行创建:

代码语言:javascript
复制
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模块:

代码语言:javascript
复制
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为两个路径,分别表示重命名之前和之后的路径,但需要注意的是:移动时必须重命名,否则会报错。

代码语言:javascript
复制
os.rename('./员工档案/丑八怪', './员工档案/乌鸦/丑八啊啊')

而只需要移动可以用上面的shutil模块中的move函数:

代码语言:javascript
复制
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,并在移动后的路径中增加修改字样:

代码语言:javascript
复制
shutil.move(f'./员工档案/{e}/{i}', './员工档案/2021_{i}')
os.rename(f'./员工档案/{e}/{i}', f'./员工档案/2021_{i}')

删除文件

删除单个文件夹,可以直接用shutilrmtree函数,而os他只能删除空的文件夹:

代码语言:javascript
复制
shutil.rmtree('员工档案')

如果员工档案中,某些员工已经离职,需要删除其对应的文件,或者删除一些不需要的文件:

则依然使用个for循环即可:

代码语言:javascript
复制
df = pd.read_csv('离职员工.csv', encoding='utf-8')
for i in df['姓名']:
    shutil.rmtree(f'./员工档案/{i}')

那么如何快速的从二级文件夹中删除离职员工对应的excel文件:

这时你如果直接用shutil.rmtree他是删除不了一个文件的,而os虽然无法删除有文件的目录,但他可以直接删除一个文件:

代码语言:javascript
复制
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}')
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与Excel之交 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建文件
  • 移动文件以及重命名文件
  • 删除文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档