环境:python 3.5
所用库:os,docx,xlwt
pip install一下啦!
收到一份特别恶心的任务,大概是这样的:领导给了一个文件夹,包含了公司不同部门,子公司的项目,文件夹内嵌套了项目图片,设计图纸,乱七八糟,要求我去统计所有项目的基础内容,然后第一反应崩溃的。不干了,辞职,做什么行政。转念一想这个月房租还没交,然后默默的打开了文件。。。。。
文件内容大概如下,好在word内多个表格格式是一样的。
废话不多说了,上代码吧
1.首先遍历文件夹,提取docx文件,把位置写进list
osflie.py
import os
# 返回docx路径
def get_docx_path(dir_path):
fwcd = os.getcwd()
x = []
# walk遍历文件
for root, dirs, files in os.walk(dir_path, topdown=False):
for name in files:
fpath = os.path.join(root, name) # 文件位置
# 提取.docx
if os.path.splitext(fpath)[1]==".docx":
x.append(os.path.join(fwcd, fpath))
return x
2.读取word,把表格数据写进dict,因为这时不确定是否会写进数据库,所以用了dict结构,将word的多分表格写进list返回,
fordocx.py (这里我的表格为两列,表头在第一列,内容在第二列,相对简单)
import os
import docx
from docx import Document
def get_docx_data(file_path):
f = Document(file_path)
x = []
for table in f.tables:
d = {} # 这里把表格数据写成了dict,具体具体
for row in table.rows:
a = row.cells[0].text
b = row.cells[1].text
if a!='' or b!='':
d[a] = b
x.append(d)
return x
3.本来打算写入数据库在转excel的,不过感觉还是直接写入excel比较方便,这里有些虎头蛇尾了,代码比较乱,大家随便看看
wdxls.py
import osfile
import fordocx
import xlwt
workbook = xlwt.Workbook(encoding = 'ascii')
worksheet = workbook.add_sheet('sheet1',cell_overwrite_ok=True)
# 获取其全部文件地址
dir_path = "项目库"
file_list = osfile.get_docx_path(dir_path)
row,column,m = 1, 0, 0
print('扫描文件总{}'.format(len(file_list)))
d = 0
# 遍历文件
for file in file_list:
# 获取文件所有表格数据
try:
f_data = foedocx.get_docx_data(file)
except Exception as e:
continue
raise e
d += len(f_data)
# 遍历数据
for table_data in f_data:
if len(table_data) == 13:
for k in table_data.keys():
worksheet.write(row, column, table_data[k])
column += 1
if column==13:
column = 0
else:
print('{:-^25}'.format('文件模板不匹配,请手动添加'))
print(file)
row += 1
# menu
for menu in table_data.keys():
worksheet.write(0, m, menu)
m += 1
workbook.save('demo1.xls')
print("已完成扫描")
然后当当当就搞定了。。。。。。
主要函数以后再补上是使用参数,大家可参考pip官网文档,相对较全,解释也比较清楚。贡献给做行政不怎么会编程的小白。共勉
</hr>