这里有点小麻烦。手头的任务是解析.txt文件中的某些字符串。我正在使用RE来帮助解决这个问题,但这条线不起作用:
s = 'Qty'
for line in txtdoc:
if s in line:
quantity = re.search(':[1-9]', line)
print(quantity.group())
以及要解析的文本(来自我的txtdoc文件中的一行):
stringstringQty:1stringstring
我应该看到打印的“:1”对吗?相反,它给出了一个错误,因为“quantity”变量为空。我也试过使用关于芬德尔它只打印了一个空集“[]”。你知道吗
现在,我想这可能与.txt文件的格式化有关,因为名义上我需要的数据是MS Word。我有一个脚本,将doc这个词保存为.txt,然后我尝试解析它。你知道吗
当我在这里尝试解析的行并将其复制/粘贴到Outlook或MS Word时,它会自动设置如下格式:
string
string
Qty:
1
string
string
所以在看到之后,我试着
re.search(r':/n[1:9]', line)
但这也不管用。有什么想法吗?我本想提供更多的代码,但我在工作中一直在做这个,回家后就一直在想这个问题,所以我不得不失去记忆。你知道吗
问题是你有一个Word.doc文件,而不是一个文本文件。你知道吗
Word文件本质上是一系列格式化文本。(实际上比这更复杂,它是一棵各种各样的树,其中一些是文本的运行,但现在让我们保持简单。)
在“经典”Word格式中,每个运行都是一个字节字符串。在现代(DOCX,又名office2007,又名officeopenxml,又名WordML)Word格式中,它们中的每一个都是树中的一个XML节点。但是不管怎样,如果一个运行以
:
结束,另一个运行以1
开始,您都不会在文件中找到:1
;您会发现:
后跟一堆cruft(一个二进制对象的结尾和下一个二进制对象的开头,或者一个XML节点的结尾和下一个XML节点的开头,可能中间有其他对象/节点),然后是1
。你知道吗如果不真正解析单词格式,就没有好的方法来处理这个问题。你知道吗
所以,最大的问题是,你有哪种格式?你知道吗
如果是DOCX,那基本上只是一个XML文件,或者一个包含XML文件的ZIP文件,您可以用Python本地解析它,或者更好地,使用一个像^{} 这样的模块为您完成所有的艰苦工作。你知道吗
如果它是经典文档,那么解析它的唯一方法就是阅读人们多年来编写的反向工程文档,并编写一些讨厌的代码来处理它。当然,你也可以用别人已经写过的代码。在本例中,我不知道任何python模块会有帮助,但是您可以通过} 程序。你知道吗
subprocess
非常轻松地控制^{或者,如果你有一个程序可以读取你机器上的文件,比如Windows上的Word或Wordpad/Write,或者Mac上的iWork页面,或者OpenOffice.org/Libre任何平台上的办公室,你都可以编写脚本。Python有很好的包装器,可以与Windows上的COM接口和Mac上的AppleScript接口进行通信,OO.o/Libre是为可编写脚本而构建的。你知道吗
This blog post是通过
pywin32
在Windows上使用Word处理文档文件的一个很好的例子。您可以使用它作为您自己的代码的起点,从每个文件中提取文本,或使Word用于搜索您,或仅保存每个文件的纯文本副本,然后您可以对其执行任何操作。网上还有成百上千的类似例子,还有类似的例子,比如用appscript
或ScriptingBridge
在Mac上做等价的操作,或者用VBA代替Python从Word内部编写脚本等等。要知道编写Word脚本时有哪些功能可用,请参阅Word 2013 developer reference,如果没有,请参阅早期版本的类似文档有了2013,或者只要在AppleScript编辑器中“打开字典”,看看Word的字典,如果你有Mac的话。你知道吗相关问题 更多 >
编程相关推荐