如何在 Linux 上使用 Python 读取 word 文件信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 Linux 上使用 Python 读取 word 文件信息相关的知识,希望对你有一定的参考价值。

参考技术A 首先下载安装win32com
from 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 类,当时(几年前)有第 3 方解决方案(他们继承 QIODevice 并做魔法),我花了几个小时调试协议 + 这个第三方库,最后,我只是切换到“打开+阅读”,一切都变得健壮了。 Qt 解决一般问题,QFile 用于常规文件。

以上是关于如何在 Linux 上使用 Python 读取 word 文件信息的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 kivy 和 python 在屏幕上显示文件的内容?

如何在 Linux 上使用 Python 读取 word 文件信息

Python怎么读取其他linux上的文件

如何利用rapidjson修改json文件

如何使用 python 读取压缩文件夹文件?

python小白提问?