论文生成器python,生成毕业论文清单的python脚本 - webdancer's Blog

快乐的大学生活就要结束了,到了毕业季,大家在兴奋中有充满了伤感,不知道何时才能再度重逢,再像这样一起生活四年是不可能了。我们应该珍惜自己身边的朋友,也许有各种毛病,但是,是人就有毛病,没有的话,那就成神了。

闲话不说了,今天早上整理同学的论文,可能是自己没做好通知,大多数同学的文件名都有问题,非常蛋疼的一个一个的帮同学修改文件名。然后去教务处交上了,但是忘了做论文的清单了,难道又要一个一个的输吗?想了想,用python写个脚本吧。因为我已经手动的帮把文件名都改成了:学号_姓名的格式,刚开始的思路,只是将文件名和学号处理一下,让程序自动的把这学号和姓名写入xls文件;但是还有论文题目,指导老师,这两项还是要一个一个的输,看了看论文,尽管有的同学的首页有问题,但是大多数同学的首页都包含了这四种信息,那就不如直接处理word文件了,把信息提取出来,直接写入xls文件。

程序的思路:

使用win32com把word转为txt文件;

读取txt文件,在前30行中搜索姓名,学号,题目,导师信息;

把提取的信息写入xls文件。

思路比较简单,程序写了一下午,主要是对win32com不熟悉,还有让人窒息的汉字编码问题,耗费了大多数时间。跑了一下,程序的效果还是比较好的,只有几个同学的文档没有按照学校给的模版写,没有抓到信息,其他的都搜到了。

# -*- coding: utf-8 -*-

import fnmatch, os, sys, win32com.client

from tempfile import TemporaryFile

from xlwt import Workbook

# prepare xls file

book = Workbook(encoding='utf-8')

sheet1 = book.add_sheet('Sheet 1')

sheet1.write(0,0,'学号')

sheet1.write(0,1,'姓名')

sheet1.write(0,2,'论文题目')

sheet1.write(0,3,'专业')

sheet1.write(0,4,'指导老师')

sheet1.col(0).width = 5000

sheet1.col(1).width = 5000

sheet1.col(2).width = 10000

sheet1.col(3).width = 5000

sheet1.col(4).width = 5000

# retrive informatio from doc

index=1

wordapp = win32com.client.gencache.EnsureDispatch("Word.Application")

try:

for path, dirs, files in os.walk(sys.argv[1]):

for filename in files:

if fnmatch.fnmatch(filename, '*.doc'):

filetype=1

elif fnmatch.fnmatch(filename, '*.docx'):

filetype=2

else:

continue

doc = os.path.abspath(os.path.join(path, filename))

print "processing %s" % doc

wordapp.Documents.Open(doc)

if filetype==1:

docastxt = doc[:-3] + 'txt'

else:

docastxt =doc[:-4]+'txt'

wordapp.ActiveDocument.SaveAs(docastxt,FileFormat=win32com.client.constants.wdFormatText)

wordapp.ActiveDocument.Close( )

f=open(docastxt,'r')

namefound=False

numberfound=False

titlefound=False

adfound=False

i=0

metadata=[u'prob']*5

for line in f:

line=unicode(line,'gbk')

i=i+1

if i>30:

break

if namefound and numberfound and adfound:

break

if titlefound:

metadata[2]=line.lstrip().rstrip()

titlefound=False

pass

if line.find(u'号')!=-1:

metadata[0]=line.split()[-1]

namefound=True

elif line.find(u'姓')!=-1:

metadata[1]=line.split()[-1]

numberfound=True

elif line.find(u'题目')!=-1:

titlefound=True

elif line.find(u'师')!=-1:

metadata[4]=line.split()[-1]

adfound=True

metadata[3]=u'计算机科学与技术'

print 'number: %s, name: %s, title: %s,dap: %s, ad: %s'%(metadata[0],metadata[1],metadata[2],metadata[3],metadata[4])

for meta in range(5):

print index,meta

sheet1.write(index,meta,metadata[meta])

index+=1

f.close()

os.remove(docastxt)

book.save('08_1_auto.xls')

book.save(TemporaryFile())

finally:

# 确保即使有异常发生Word仍能被正常关闭

wordapp.Quit( )

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值