懒人的Python技巧#20060706

来源:互联网 发布:北京大学网络教育本科 编辑:程序博客网 时间:2024/04/27 23:41

很多工作经常是在同时打开了N个窗口,搞不好还开着Photoshop和/或Illustrator的情况下进行。如此负荷,再快的电脑也照给“沙漏”。然而即使是在这样的情形之下,还经常会遇到“希望把Word文档转为文本文件”的需求——这大约是Word的滥用和优秀文本实用工具的不普及导致的恶果。

没有办法,如此一来我经常不得不做出这样的麻烦事情:

[“麻烦得要死”版操作指南]

步骤1:左手按“Windows键+E”打开文件管理器;

步骤2:右手用鼠标浏览文件夹找到要打开的Word文档;

步骤3:双击打开文档;

步骤4:按F12或“Alt + F 接 O”,打开“另存为”菜单;

步骤5:从下拉框选择TXT格式进行保存。

不堪其扰!

联想起以前用过的一些音频格式转换工具,只需要将要转换的文件拖拽到工具的图标上就自动搞定,且不说免去了打开软件的繁复,也不必去应对各种对话框和选择。要是Word转换TXT能有如此方便该多好!

偶然在 Python Cookbook 2/e 上面看到了
Recipe 2.27. Extracting Text from Microsoft Word Documents
颇为所动,于是花了一小会儿功夫写下一段Python程序和一个批处理,然后我把批处理文件的快捷方式拿到了桌面上,于是Word转TXT这件事情就变成了:

[简化了的操作指南]

步骤1:按“Windows + E”打开文件管理器;

步骤2:右手用鼠标浏览文件夹找到要打开的Word文档;

步骤3:拖拽Word文档到批处理快捷方式上,直接在源目录得到相应的TXT。


代码写得难看,不过管用才是我更需要的。

 

---- DocToText.py ---- BEGIN ----

import fnmatch, os, sys, win32com.client

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

try:
 file_path = sys.argv[1]
 # 取得文件名
 file_path_list = file_path.split('//')
 file_name = file_path_list[len(file_path_list) - 1]
 # 取得文件所在的路径
 path_name = file_path[:file_path.index(file_name)]
 # 必须是 .doc 文件
 if not fnmatch.fnmatch(file_name, '*.doc') :
  print "ERROR: The file you specified MUST be a DOC file./n"
 else :
  hasFile = False
  # 检查指定的路径下是否确实存在指定的文件
  for filename in os.listdir(path_name) :
   if filename == file_name :
    hasFile = True
    break
  if hasFile :
   doc = file_path
   print "processing %s" % doc
   wordapp.Documents.Open(doc)
   docastxt = doc[:-3] + 'txt'
   wordapp.ActiveDocument.SaveAs(docastxt,
    FileFormat=win32com.client.constants.wdFormatText)
   wordapp.ActiveDocument.Close( )
  else :
   print "ERROR: /"" + sys.argv[1] + "/" does not exist./n"
finally:
 # 保证Word被关闭
 # TODO: 在已经有Word文档被打开时会遇到一个退出保存的提问
 wordapp.Quit( )

---- DocToText.py ---- E N D ----

 

---- DocToTextBatch.bat ---- BEGIN ----

REM 以批处理接收到的参数调用python程序
python e:/code/DocToText/DocToText.py %1

---- DocToTextBatch.bat ---- E N D ----




原创粉丝点击