如何在 Linux 上使用 Python 读取 word 文件信息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 Linux 上使用 Python 读取 word 文件信息相关的知识,希望对你有一定的参考价值。
参考技术A 首先下载安装win32comfrom win32com import client as wc
word = wc.Dispatch('Word.Application')
doc = word.Documents.Open('c:/test')
doc.SaveAs('c:/test.text', 2)
doc.Close()
word.Quit()
这种方式产生的text文档,不能用python用普通的r方式读取,为了让python可以用r方式读取,应当写成
doc.SaveAs('c:/test', 4)
注意:系统执行完成后,会自动产生文件后缀txt(虽然没有指明后缀)。
在xp系统下面,应当
open(r'c:\text','r')
wdFormatDocument = 0
wdFormatDocument97 = 0
wdFormatDocumentDefault = 16
wdFormatDOSText = 4
wdFormatDOSTextLineBreaks = 5
wdFormatEncodedText = 7
wdFormatFilteredhtml = 10
wdFormatFlatXML = 19
wdFormatFlatXMLMacroEnabled = 20
wdFormatFlatXMLTemplate = 21
wdFormatFlatXMLTemplateMacroEnabled = 22
wdFormatHTML = 8
wdFormatPDF = 17
wdFormatRTF = 6
wdFormatTemplate = 1
wdFormatTemplate97 = 1
wdFormatText = 2
wdFormatTextLineBreaks = 3
wdFormatUnicodeText = 7
wdFormatWebArchive = 9
wdFormatXML = 11
wdFormatXMLDocument = 12
wdFormatXMLDocumentMacroEnabled = 13
wdFormatXMLTemplate = 14
wdFormatXMLTemplateMacroEnabled = 15
wdFormatXPS = 18
照着字面意思应该能对应到相应的文件格式,如果你是office 2003可能支持不了这么多格式。word文件转html有两种格式可选wdFormatHTML、wdFormatFilteredHTML(对应数字 8、10),区别是如果是wdFormatHTML格式的话,word文件里面的公式等ole对象将会存储成wmf格式,而选用 wdFormatFilteredHTML的话公式图片将存储为gif格式,而且目测可以看出用wdFormatFilteredHTML生成的HTML 明显比wdFormatHTML要干净许多。
当然你也可以用任意一种语言通过com来调用office API,比如php.
from win32com import client as wc
word = wc.Dispatch('Word.Application')
doc = word.Documents.Open(r'c:/test1.doc')
doc.SaveAs('c:/test1.text', 4)
doc.Close()
import re
strings=open(r'c:\test1.text','r').read()
result=re.findall('\(\s*[A-D]\s*\)|\(\xa1*[A-D]\xa1*\)|\(\s*[A-D]\s*\)|\(\xa1*[A-D]\xa1*\)',strings)
chan=re.sub('\(\s*[A-D]\s*\)|\(\xa1*[A-D]\xa1*\)|\(\s*[A-D]\s*\)|\(\xa1*[A-D]\xa1*\)','()',strings)
question=open(r'c:\question','a+')
question.write(chan)
question.close()
answer=open(r'c:\answeronly','a+')
for i,a in enumerate(result):
m=re.search('[A-D]',a)
answer.write(str(i+1)+' '+m.group()+'\n')
answer.close()
chan=re.sub(r'\xa3\xa8\s*[A-D]\s*\xa3\xa9','()',strings)
#不要(),容易引起歧义。
如何在 Linux 上使用 Qt 读取 HID 设备 (/dev/hidrawX)?
【中文标题】如何在 Linux 上使用 Qt 读取 HID 设备 (/dev/hidrawX)?【英文标题】:How to read HID devices (/dev/hidrawX) with Qt on Linux? 【发布时间】:2013-07-14 19:04:29 【问题描述】:我正在开发一种“RepRap 校准工具”,该工具将使用连接到打印平台的鼠标来测量平台的移动。
现在我无法从 /dev/hidrawX
读取原始鼠标数据,但我无法读取任何数据。
到目前为止我已经尝试过:
第一次尝试:
QFile f("/dev/hidraw0");
f.readAll();
什么都不读。
第二次尝试:
m_file = new QFile("/dev/hidraw0");
m_sn= new QSocketNotifier(m_file->handle(), QSocketNotifier::Read);
m_sn->setEnabled(true);
connect(m_sn, SIGNAL(activated(int)), this, SLOT(readyRead()));
然后在readyRead SLOT上:
qDebug()<<"Ready Read!!"<<m_file.bytesAvailable();
QTextStream d(&m_file);
qDebug()<< d.read(64);
这段代码触发readyRead槽一次,但它卡在read(64)调用上,如果我注释read(64),每次鼠标移动时都会触发槽。
m_file.bytesAvailable()
总是报告 0。
使用 Qt 读取这些设备的正确方法是什么?
解决方案:
我修改了如下代码:
bool rcMouseHandler::openHidraw(QString device)
int fd =open(device.toLocal8Bit(),O_NONBLOCK);
if(fd <=0)
qDebug()<<"[WARN]rcMouseHandler::open-> Cant open!";
return false;
m_sn= new QSocketNotifier(fd, QSocketNotifier::Read);
m_sn->setEnabled(true);
connect(m_sn, SIGNAL(activated(int)), this, SLOT(readyRead()));
return true;
void rcMouseHandler::readyRead()
qDebug()<<"Ready Read!!";
char buffer[4] = 0,0,0,0;
read(m_sn->socket(),&buffer,4);
qDebug()<<(quint8)buffer[0]<<(quint8)buffer[1]<<(quint8)buffer[2]<<(quint8)buffer[3];
【问题讨论】:
【参考方案1】:我认为这里不使用 Qt 的正确方法。当您的这部分代码不可移植(与 /dev/* 一起使用的部分)时,为什么需要打开和读取 POSIX 之上的便携式包装器。在 O_NONBLOCK 中用“open”“man 2 open”打开设备并调用“read”(man 2 read)从中获取数据。而且您仍然可以使用带有返回“open”的句柄的 QSocketNotifier。
【讨论】:
谢谢!这解决了我的问题:) 实际上我不需要便携式解决方案来读取鼠标,我将只使用 linux。只是认为 QT 应该有一些东西来管理这种情况。 很久以前我想通过 RS232 使用设备时遇到了同样的问题。现在 qt5 有 qserial以上是关于如何在 Linux 上使用 Python 读取 word 文件信息的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 kivy 和 python 在屏幕上显示文件的内容?