【行政办公系列】Python批量复制文件并重命名
HDUZN

问题描述

比如我需要收集全部员工填写后的一份资料,要让每个人填写某个文档(模板)。现在手上有个名单列表。

考虑到钉钉群里面,部分人没有电脑,只有手机的,用手机下载文件再编辑上传比如麻烦。

为了方便操作,就可以建个文件夹,把模板的文档复制到文件夹中,并依次重命名为员工姓名的文件名。

然后把整个文件夹上传到钉钉群就可以了。群成员找到文件夹中自己名字的文档,直接在线编辑就行了。

当然,上面只是举个例子,主要是方便在钉钉群中方便群员用手机操作。

此文主要介绍用Python读取Excel中姓名列表,再批量复制文件并重命名的方法。

实现思路

  • 读取Excel表中姓名列的数据
  • 创建一个目录,用来放所有的文档
  • 循环遍历姓名列表(List),依次复制文件并重命名

一、用openpyxl库读取Excel表格

openpyxl 库是Python用来操作Excel表格(.xlsx)一个库。这里只简单介绍怎么读取一列数据,不作详细介绍。

比如有这样一张表:

我们怎么把A列的数据读出来。

1.安装openpyxl 库

1
pip install openpyxl

2.读取Excel一列(A列)数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import openpyxl

# 从 Excel文件中读取 指定列(col_name) 的数据返回List
def read_from_excel_by_col_name(ex_file, sheet_name, col_name):
if(os.path.exists(ex_file)):
book = openpyxl.load_workbook(ex_file)
sheet = book[sheet_name]
else:
return False

value_list = []
for col_num in sheet[col_name]:
value_list.append(col_num.value)
book.close()
return value_list

# name_list 即获取到的姓名列表 e.g ['1荀彧','2荀攸']
name_list = read_from_excel_by_col_name('信息表.xlsx', 'Sheet1', 'A')

二、创建文件夹

这个简单,直接用Python自带的os库的makedirs()方法就行。

1
2
3
4
5
6
7
8
9
# 创建一个文件夹
import os

def mkdir(path):
outdir = os.path.exists(path)
if not outdir:
os.makedirs(path)

mkdir('D:\107轨迹确认书')

三、复制文件并重命名

用shutil库,实现对文件的复制操作,之前一篇文章专门讲了这个库的用法举例:Python文件操作 shutil库使用举例

1
2
3
4
5
6
7
8
9
10
import shutil

temp_file = r'D:\a.docx' # 模板文件
houzhui = '.' + temp_file.split('.')[-1] # 模板文件后缀 .docx

dst_path = r'D:\107轨迹确认书' # 存放新文件的目录
new_file_name = '1荀彧'
dst = dst_path + '\\' + new_file_name + houzhui # 'D:\107轨迹确认书\1荀彧.docx' 这个路径是windows下写法

shutil.copy(temp_file, dst) # 复制文件并重命名

四、完整代码举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import os, shutil
import openpyxl

# 创建文件夹
def mkdir(path):
outdir = os.path.exists(path)
if not outdir:
os.makedirs(path)

# 从 Excel文件中读取 指定列(col_name) 的数据返回List
def read_from_excel_by_col_name(ex_file, sheet_name, col_name):
if(os.path.exists(ex_file)):
book = openpyxl.load_workbook(ex_file)
sheet = book[sheet_name]
else:
return False

value_list = []
for col_num in sheet[col_name]:
value_list.append(col_num.value)
book.close()
return value_list

def main():
ex_file = r'.\信息表.xlsx'
temp_file = r'C:\节假日离校返家师生员工行动轨迹确认书.doc'
houzhui = '.' + temp_file.split('.')[-1] # .doc
# print(houzhui)

dst_path = r'D:\107轨迹确认书'
mkdir(dst_path) # 创建文件夹

# 获取姓名列表
name_list = read_from_excel_by_col_name(ex_file, 'Sheet1', 'A')
# print(name_list)

# 批量复制文件并重命名
for name in name_list:
dst = dst_path + '\\' + name + houzhui
shutil.copy(temp_file, dst)
print('-------------fine!')

main()
# print(os.getcwd()) # 查看当前工作目录路径

运行后结果如图:

  • 本文标题:【行政办公系列】Python批量复制文件并重命名
  • 本文作者:HDUZN
  • 创建时间:2022-05-28 12:24:57
  • 本文链接:http://hduzn.cn/2022/05/28/【行政办公系列】Python批量复制文件并重命名/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论