问题描述:
比如我需要收集全部员工填写后的一份资料,要让每个人填写某个文档(模板)。现在手上有个名单列表。
考虑到钉钉群里面,部分人没有电脑,只有手机的,用手机下载文件再编辑上传比如麻烦。
为了方便操作,就可以建个文件夹,把模板的文档复制到文件夹中,并依次重命名为员工姓名的文件名。
然后把整个文件夹上传到钉钉群就可以了。群成员找到文件夹中自己名字的文档,直接在线编辑就行了。
当然,上面只是举个例子,主要是方便在钉钉群中方便群员用手机操作。
此文主要介绍用Python读取Excel中姓名列表,再批量复制文件并重命名的方法。
实现思路:
- 读取Excel表中姓名列的数据
- 创建一个目录,用来放所有的文档
- 循环遍历姓名列表(List),依次复制文件并重命名
一、用openpyxl库读取Excel表格
openpyxl 库是Python用来操作Excel表格(.xlsx)一个库。这里只简单介绍怎么读取一列数据,不作详细介绍。
比如有这样一张表:

我们怎么把A列的数据读出来。
1.安装openpyxl 库
2.读取Excel一列(A列)数据
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | import openpyxl
 
 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 = read_from_excel_by_col_name('信息表.xlsx', 'Sheet1', 'A')
 
 | 
二、创建文件夹
这个简单,直接用Python自带的os库的makedirs()方法就行。
| 12
 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库使用举例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | import shutil
 temp_file = r'D:\a.docx'
 houzhui = '.' + temp_file.split('.')[-1]
 
 dst_path = r'D:\107轨迹确认书'
 new_file_name = '1荀彧'
 dst = dst_path + '\\' + new_file_name + houzhui
 
 shutil.copy(temp_file, dst)
 
 | 
四、完整代码举例
| 12
 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, shutilimport openpyxl
 
 
 def mkdir(path):
 outdir = os.path.exists(path)
 if not outdir:
 os.makedirs(path)
 
 
 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]
 
 
 dst_path = r'D:\107轨迹确认书'
 mkdir(dst_path)
 
 
 name_list = read_from_excel_by_col_name(ex_file, 'Sheet1', 'A')
 
 
 
 for name in name_list:
 dst = dst_path + '\\' + name + houzhui
 shutil.copy(temp_file, dst)
 print('-------------fine!')
 
 main()
 
 
 | 
运行后结果如图:
