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

Python 3.x 尽管拥有权限,但在QPython中关闭xlsxwriter工作簿时出现PermissionError,python-3.x,xlsxwriter,qpython,qpython3,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, Ju

我确实有写入特定目录的权限,文件也会被创建。但是行
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
>>>
这对qpython不起作用。所以我在内存中使用了构造函数的参数
,这个参数起作用了

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

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

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

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

import tempfile
print(tempfile.gettempdir())
您可以通过两种方式解决此问题:

  • 更改Python和XlsxWriter使用的默认tmp目录的权限
  • 使用
    tmpdir
    更改XlsxWriter使用的tmp目录的位置

  • 尽管我无法使用您建议的解决方案(指定tmpdir仍然会导致相同的错误,并且我没有修改应用程序权限)。然而,我将构造函数的
    参数设置为true,它就工作了。所以,我接受这个答案,因为它显示了正确的方向。顺便说一句,你在这个模块上做了非常出色的工作,同样令人印象深刻的是它的文档。我觉得每个人都应该记录代码。
    
    import tempfile
    print(tempfile.gettempdir())