背景
暑期在一家国企人力资源部实习,尽是些杂活,悠闲且乏味。
今天主管要求将一堆(大概千余份)过期员工合同的编号和员工名字,合同格式各式各样(图片、PDF、文件夹),并且需要根据前部分序号排序,通过手工一个个敲入Excel显然太蠢,想到可以通过python程序操作完成。
目的
嫌麻烦,想偷懒,为了摸鱼不择手段。
其他应用
读取文件在计算机科学中被广泛使用,特别是在数据处理、机器学习、人工智能和自然语言处理等领域。在这些领域,数据往往存储在文件中,需要使用读取文件的技术来提取和分析数据。
数据样式
这里由于涉及公司隐私,故自制了一份类似的数据,置于源python文件统计目录的data文件夹下:
库导入和Excel创建
import os
import xlwt
import re
path = r'./data/过期人员' # 数据存放路径
# 获取代码文件夹下的所有文件名
filenames = os.listdir(path)
# 创建一个新的 Excel 文件
workbook = xlwt.Workbook()
# 添加一个工作表
worksheet = workbook.add_sheet('Sheet1')
数据读取
这里需要创建一个容器存放文件夹下所有的员工信息
- 利用enumerate()函数对文件夹下的内容进行遍历
- 确定内容格式——如果是成员信息是文件夹格式就不需要改,如果是pdf格式或者jpg格式就需要去掉“.”及后面的内容
# 创建一个列表用于存放员工信息
namelist = []
# 写入文件名
for i, filename in enumerate(filenames):
if os.path.isfile(os.path.join(path, filename)):
filename = filename.split('.')[0]
namelist.append(filename)
利用split()函数将读取到的pdf或jpg格式员工信息按符号“.”切分,取第0部分,即“.”号之前的内容,存入列表中。
排序
这样保存下来的员工信息序号是不正常的,需要根据符号“-”前面的所有数字进行排序,按理说2号的张三应该是排在最前面的,想了想,用re库构建正则表达式取数后再排序。
com = re.compile(r'(.+)-')
namelist = sorted(namelist, key=lambda item: int(re.findall(com, item)[0]))
for each in namelist:
print(each)
好了,正常了,就是这样。
compile(r'(.+)-')就是识别“-”号前的所有内容,findall()取出所有这样的内容,然后我们用到的就是第[0]个,把这个内容转换为int格式,然后才能用sort()排序。
写入Excel并保存
for i in range(len(namelist)):
worksheet.write(i, 0, namelist[i])
# 保存文件
workbook.save('./data/过期人员名单.xls')
完整简要代码
import os
import xlwt
import re
path = r'./data/过期人员'
# 获取代码文件夹下的所有文件名
filenames = os.listdir(path)
# 创建一个新的 Excel 文件
workbook = xlwt.Workbook()
# 添加一个工作表
worksheet = workbook.add_sheet('Sheet1')
# 创建一个列表用于存放员工信息
namelist = []
# 写入文件名
for i, filename in enumerate(filenames):
if os.path.isfile(os.path.join(path, filename)):
filename = filename.split('.')[0]
namelist.append(filename)
com = re.compile(r'(.+)-')
namelist = sorted(namelist, key=lambda item: int(re.findall(com, item)[0]))
for i in range(len(namelist)):
worksheet.write(i, 0, namelist[i])
# 保存文件
workbook.save('./data/过期人员名单.xls')