文科小萌新,零基础自学python主要是为了办公自(tou)动(ge)化(lan)。
办公室电脑中有一个文件夹,里面全部都是发货箱单,格式为.xls,因发货量大,每周至少增加十几个箱单,有时候要查找或分类就比较麻烦。试过excel自带的文件夹目录功能,要导出目录还是挺方便的。但是因为箱单文件名中含有发货日期、发货唛头,我想要的效果是提取出发货日期,按日期倒序排列,提取出唛头,单独放一列。用vba应是可以实现的,但是正好在学python,所以想试一下。第一版做的有些麻烦,有3个部分组成,因办公电脑只有excel2003,所以只能导出.xls,用了xlrd和xlwt。后续用pandas再试一试,应该更简单。
第一部分:
#!/usr/bin/env python
# coding: utf-8
"""此程序用来提取指定文件夹下所有文件名、文件路径以及文件名中关键词,并分别输入excel表格中"""
import os, xlwt, re
book = xlwt.Workbook(encoding='utf8',style_compression=0) # 初始化工作簿
sheet = book.add_sheet('sheet1') # 新建工作表
path = "E:\箱单" # 指定文件夹路径
def get_file(path):
n = 0
for root, dirs, files in os.walk(path):
for file in files:
n += 1
# 把提取的日期写入第1列,若无日期,为空
date = re.search(r'(\d{4}-?\d{1,2}-?\d{1,2})', file)
if date is not None:
sheet.write(n, 0, date.group())
else:
sheet.write(n, 0, " ")
# 把文件名写入第2列
sheet.write(n, 1, file)
# 把文件路径写入第3列
file_path = os.path.join(root, file)
sheet.write(n, 2, file_path)
# 把提取的唛头写入第4列,若无唛头,写入“无唛头信息”
pattern = re.compile(r'(Q-[0-9a-zA-Z]+)')
result = re.findall(pattern, file)
if result:
sheet.write(n, 3, " ".join(i for i in result))
else:
sheet.write(n, 3, "无唛头信息")
get_file(path)
book.save(r'箱单索引表.xls')
第二部分:
#!/usr/bin/env python
# coding: utf-8
import xlwt
from xlrd import open_workbook
target_col = 0 #以第1列为索引排序
book = open_workbook(r'箱单索引表.xls',formatting_info=True)
sheet = book.sheets()[0]
data = [sheet.row_values(i) for i in range(sheet.nrows)]
label = data[0]
data = data[1:]
data.sort(key=lambda x: x[target_col],reverse=True)
bk = xlwt.Workbook()
st = bk.add_sheet("箱单索引表")
for idx_r, row in enumerate(data):
for idx_c, value in enumerate(row):
st.write(idx_r+1, idx_c, value)
bk.save(r'箱单索引表.xls')
第三部分:
#!/usr/bin/env python
# coding: utf-8
import xlwt
from xlrd import open_workbook
book = open_workbook(r'箱单索引表.xls', formatting_info=True)
sheet = book.sheets()[0]
my_book = xlwt.Workbook()
my_sheet = my_book.add_sheet("箱单索引表")
my_sheet.col(1).width = 256*55
my_sheet.col(2).width = 256*35
my_sheet.write(0, 0, "发货日期")
my_sheet.write(0, 1, "箱单链接")
my_sheet.write(0, 2, "唛头")
for rowx in range(1, sheet.nrows):
date = sheet.cell_value(rowx, 0)
my_sheet.write(rowx, 0, date)
name = sheet.cell_value(rowx, 1)
path = sheet.cell_value(rowx, 2)
my_sheet.write(rowx, 1, xlwt.Formula('HYPERLINK("%s";"%s")'%(path,name)))
mark = sheet.cell_value(rowx, 3)
my_sheet.write(rowx, 2, mark)
my_book.save(r'C:\Users\61782_000\Desktop\箱单索引表.xls')
生成的箱单索引表效果: