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



我确实有权写入特定目录,文件也会被创建。但是线路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
>>>

编辑:解决方案

如果有人在电脑中遇到这个错误,jmcnamara的解决方案将是合适的。

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

这对qpython不起作用。所以我使用了构造函数的in_memory参数,它起作用了。

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

XlsxWriter使用tmp文件创建组成xlsx文件的XML文件,然后将它们压缩到xlsx中。

您看到的错误是由于Python在您的系统上使用的tmp目录权限不足。注意,这个目录与创建输出文件的目录不同。

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

import tempfile
print(tempfile.gettempdir())

你可以通过两种方式解决这个问题:

  1. 更改Python使用的默认tmp目录的权限,从而更改XlsxWriter使用的权限
  2. 使用构造函数的tmpdir参数更改XlsxWriter使用的tmp目录的位置

最新更新