python - 如果 docx 文件已打开,则将其关闭

标签 python docx python-docx

我正在处理 docx 文件,为了防止出现 PermissionError: [Errno 13] Permission returned 错误,我尝试添加 os.close() 在我的代码中,但正如我所见,它不接受文件路径,它接受文件描述符作为参数。所以我尝试了:

file_path = 'my file path'
mydoc = docx.Document()
mydoc.add_paragraph('text')
try:
    mydoc.save(file_path)
    return
except PermissionError:
    fd = os.open(file_path, os.O_WRONLY)
    os.close(fd)
    mydoc.save(file_path)
    return

但是当我运行它时,由于错误处理,它会传递第一个 PermissionError 错误,但是当它尝试执行 fd = os.open(file_path, os.O_WRONLY),我遇到了同样的错误。那么,如果 docx 文件已打开,是否有可能关闭它?

编辑:

这是整个回溯

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\17326\PycharmProjects\newEksi\main2.py", line 194, in arat
    mydoc.save(dosya_yolu)
  File "C:\Users\17326\PycharmProjects\newEksi\venv\lib\site-packages\docx\document.py", line 167, in save
    self._part.save(path_or_stream)
  File "C:\Users\17326\PycharmProjects\newEksi\venv\lib\site-packages\docx\parts\document.py", line 111, in save
    self.package.save(path_or_stream)
  File "C:\Users\17326\PycharmProjects\newEksi\venv\lib\site-packages\docx\opc\package.py", line 172, in save
    PackageWriter.write(pkg_file, self.rels, self.parts)
  File "C:\Users\17326\PycharmProjects\newEksi\venv\lib\site-packages\docx\opc\pkgwriter.py", line 32, in write
    phys_writer = PhysPkgWriter(pkg_file)
  File "C:\Users\17326\PycharmProjects\newEksi\venv\lib\site-packages\docx\opc\phys_pkg.py", line 141, in __init__
    self._zipf = ZipFile(pkg_file, 'w', compression=ZIP_DEFLATED)
  File "C:\Users\17326\AppData\Local\Programs\Python\Python38-32\lib\zipfile.py", line 1251, in __init__
    self.fp = io.open(file, filemode)
PermissionError: [Errno 13] Permission denied: 'C:/Users/17326/Desktop/entries.docx'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\17326\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "C:\Users\17326\PycharmProjects\newEksi\main2.py", line 197, in arat
    fd = os.open(dosya_yolu, os.O_WRONLY)
PermissionError: [Errno 13] Permission denied: 'C:/Users/17326/Desktop/entries.docx'

最佳答案

python-docx 中不存在“打开”文件之类的东西。当您使用 document = Document("my-file.docx") 读入文件并对其进行编辑时,python-docx 会读入该文件,仅此而已。是的,在读入时它会打开一瞬间,但不会保持打开状态。打开/关闭循环在 Document() 调用返回之前结束。

保存文件时也是如此。当您调用 document.save("my-output-file.docx") 时,文件将在 .save() 方法之前打开、写入和关闭返回。

所以它不像 Word 本身,您打开一个文件,处理一段时间,然后保存并关闭它。您只需将“起始”文件读入内存,对该内存中的对象进行更改,然后写入内存中的表示(几乎总是写入不同的文件)。

评论是在正确的轨道上。查找权限问题,不允许您在未连接到打开文件的位置写入文件,除非您在程序运行时在 Word 或其他内容中打开了相关文件。

关于python - 如果 docx 文件已打开,则将其关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63784991/

相关文章:

python - 如何将dataFrame中的groupby分组表写入word文档?

python - 如何在python 3中将png文件添加到word文档中

python - web2py 如何注销用户

python - 用python制作GCF计算器

python - 如何在 Python 中创建 ramdisk?

python - Pandas 不稳定地返回 TypeError 无法使用 <class 'pandas.core.indexes.base.Index' > 的这些索引器 [310] 对 <class 'int' > 进行切片索引

java - 如何为 docx run apache poi 设置粗体

java - 识别 docx 中文本的颜色

html - Xamarin 免费 HTML 或 DOC 到 PDF 转换

python - docx.opc.exceptions.PackageNotFoundError : Package not found at