尽管具有权限,但在QPython中关闭xlsxwriter工作簿时出现PermissionError

时间:2018-11-08 21:42:38

标签: python-3.x xlsxwriter qpython qpython3

我确实具有写入特定目录的权限,并且文件也被创建。但是行w.close()会导致错误。

由于我正在使用此模块创建文件,因此无法在任何其他应用程序中打开它。

如果有意义,其他模块,例如csv都可以正常工作。

/data/user/0/org.qpython.qpy/files/bin/qpython3-android5.sh && exit
n/qpython3-android5.sh && exit          <
Python 3.6.6 (qpyc:3.6.6, Jul 26 2018, 03:54:22) [BUILD WITH QPY3-TOOLCHAIN (https://github.com/qpython-android) ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.chdir('scripts3')
>>> os.getcwd()
'/storage/emulated/0/qpython/scripts3'
>>> import xlsxwriter
>>> w = xlsxwriter.Workbook('0.xlsx')
>>> w.close()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/data/user/0/org.qpython.qpy/files/lib/python3.6/site-packages/xlsxwriter/workbook.py", line 306, in close
    self._store_workbook()
  File "/data/user/0/org.qpython.qpy/files/lib/python3.6/site-packages/xlsxwriter/workbook.py", line 675, in _store_workbook
    os.utime(os_filename, (timestamp, timestamp))
PermissionError: [Errno 1] Operation not permitted
>>>

编辑:解决方案

如果某人在PC上遇到此错误,则jmcnamara的解决方案将是适当的。

w = xlsxwriter.Workbook('0.xlsx', {'tmpdir': 'path/to/tmpdir'})

这不适用于qpython。因此,我使用了构造函数的in_memory参数。

w = xlsxwriter.Workbook('0.xlsx', {'in_memory': True})

1 个答案:

答案 0 :(得分:1)

XlsxWriter使用tmp文件创建构成xlsx文件的XML文件,然后再将其压缩到xlsx文件中。

您看到的错误是由于Python在您的系统上使用的tmp目录上缺少权限所致。请注意,此目录与创建输出文件的目录不同。

您可以通过在与应用程序相同的环境中运行以下命令来找到tmpdir位置:

import tempfile
print(tempfile.gettempdir())

您可以通过两种方法解决此问题:

  1. 更改Python以及XlsxWriter使用的默认tmp dir的权限。
  2. 使用tmpdir parameter of the constructor更改XlsxWriter使用的tmp目录的位置。