懒人的Python技巧#20060706

news/2024/7/5 10:23:27

很多工作经常是在同时打开了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 ----





http://www.niftyadmin.cn/n/3651730.html

相关文章

移除元素 leetcode java篇

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…

懒人的Python技巧#20060708

National Geographic 的网站上有一个 Photo of the Day (POTD)栏目:http://lava.nationalgeographic.com/pod/ (当天的墙纸)http://lava.nationalgeographic.com/cgi-bin/pod/archive.cgi (以前的墙纸Archi…

Python Cookbook 第二版 汉化版 [00-1-Info]

Python Cookbook 第二版 汉化版David Ascher, Alex Martelli, Anna Ravenscroft 著出版社: OReilly出版日期: March 2005ISBN: 0-596-00797-3页码数目: 844 页同本书第一版一样,第二版汇集了 Python 程序员遇到的常见问题的解决办法。第二版针对 Python 2.4 做了相应…

搜索插入位置 leetcode java篇

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 p.s. 用移位操作符时一定要打括号,不然优先级太后面了,会导致死循环…

最大子数组和 leetcode java篇

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 class Solution {public int maxSubArray(int[] ns) {int max ns[0];int pre 0;for(in…

考试的最大困扰度 leetcode java篇

一位老师正在出一场由 n 道判断题构成的考试,每道题的答案为 true (用 T 表示)或者 false (用 F 表示)。老师想增加学生对自己做出答案的不确定性,方法是 最大化 有 连续相同 结果的题数。(也就…

Lonely Low

Have you ever been this lowthat you dont know where to go?Missing something you do long for,trying to get to heaven before they close the door?You walk slowly along the beach,seeing the sands of time sort of etch.You look around -- the sea is blue,shout …

SHAKESPEARE SONNETS LXVI

性能测试常见误区请看下面一个性能测试小案例:某公司OA产品的新版本即将发布。为了看看系统的性能,决定安排测试工程师A君执行性能测试任务。A君做法如下:1. 找到一台PC机,CPU主频1G,内存512M,……&a…