【问题标题】:Renaming .doc or .docx with python according to a text from the document根据文档中的文本使用 python 重命名 .doc 或 .docx
【发布时间】:2020-03-30 02:55:37
【问题描述】:

我有一个关于根据文档中的特定文本更改 .doc 或 .docx 文件名的问题。

我已经能够使用 .txt 文件建立此功能。使用以下代码:

import os
import re
pat = "ID number(\\d\\d\\d\\d\\d)"         #This is for the text to be found in the file
ext = '.txt'                                #Type of file the python is searching for
mydir = ''  #Path or directory where python is doing its magic

for arch in os.listdir(mydir):              
    archpath = os.path.join(mydir, arch)
    with open(archpath) as f:
        txt = f.read()
    s = re.search(pat, txt)
    if s is None:
        continue
    name = s.group(1)
    newpath = os.path.join(mydir, name)
    if not os.path.exists(newpath):
        os.rename(archpath, newpath + ext)

有人对此有什么看法吗?

【问题讨论】:

  • 你需要解释清楚一点。在这里,您将展示如果您在哪里解析文本文件,您将如何做?您想知道如何解析 doc 或 doc ex 并查找此正则表达式吗?
  • 抱歉不够详细。我想要做的是打开一个 doc 或 docx 文件并查找某个值,它将重命名文件并保存它。
  • DOC 文件不是文本文件; just plain open 可以读取纯文本,但您需要一个 DOC 格式的解析器来执行此操作。查找python-docx 模块或等效模块以读取Microsoft 的文件格式。 (我不确定它是否也可以读取旧的.doc 格式。也许你需要一个单独的模块,或者黑魔法。)

标签: python rename docx file-rename doc


【解决方案1】:

你需要python-docx

from docx import Document
for arch in os.listdir(mydir):              
    archpath = os.path.join(mydir, arch)
    document = Document(archpath)
    for para in document.paragraphs:
        s = re.search(pat, para.text)
    if s is None:
        continue
    name = s.group(1)
    newpath = os.path.join(mydir, name)
    if not os.path.exists(newpath):
        os.rename(archpath, newpath+'docx')

【讨论】:

  • 感谢您的回答。但现在看来我遇到了一个不同的问题。当试图运行它时,它表明我没有正确的模块。即使我确实安装了 python-docx?
  • 使用 VENV 修复它。但是现在出现了这个问题:文件“site-packages\docx\api.py, line 25 in Document 。其中几个,然后最后 KeyError:“no relationship of type 'schemas.openxmlformats.org/officeDocument/2006/relationships/…' in collection” 有什么的源文件格式?
  • 您可能需要在某处发布您的 doc 文件
  • 我发现了我的问题。那是它的一张桌子。所以我必须使用 docx.document.table 来获取信息。但由于某种原因,它只查看表格的最后一行,所以我仍在试图弄清楚
【解决方案2】:

找到了答案。问题在我这边。我试图找到一个价值。但我需要的是指定一个单元格。由于该值在表中。

结果如下:

import os
import re
import sys
pat = "(\d+)"       #Type of string/value that is being renamed
ext = '.docx'       #Type of file the python is searching for
mydir = ''  #Path or directory where python is doing its magic

from docx import Document
for arch in os.listdir(mydir):
    archpath = os.path.join(mydir, arch)
    document = Document(archpath)
    table = document.tables[0]
    s = re.search(pat,table.cell(1,2).text)
    if s is None:
        continue
    name = s.group(1)
    newpath = os.path.join(mydir, name)
    if not os.path.exists(newpath):
        os.rename(archpath, newpath + ext)
print (newpath + ext)
input("Press Enter to exit")

需要注意的是,此方法仅适用于可用于 word 2007 及更高版本的 .docx 文件。由于 python-docx 不适用于早期版本或 .doc 文件

所以我的下一个项目是实现一个从 .doc 到 .docx 的转换器

感谢大家的参与。

【讨论】:

  • 使用antiwordantiword my.doc > my.docx
猜你喜欢
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
相关资源
最近更新 更多