尽管具有权限,但在 QPython 中关闭 xlsxwriter 工作簿时出现 PermissionError
PermissionError when closing xlsxwriter Workbook in QPython despite having permissions
我确实有权写入特定目录,并且文件也已创建。但是行 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})
XlsxWriter 使用 tmp 文件创建组成 xlsx 文件的 XML 文件,然后再将它们压缩到 xlsx 文件中。
您看到的错误是由于缺少 Python 在您的系统上使用的 tmp 目录的权限。请注意,此目录与创建输出文件的目录不同。
您可以在与您的应用程序相同的环境中通过 运行 找到 tmpdir 位置:
import tempfile
print(tempfile.gettempdir())
您可以通过两种方式解决此问题:
- 更改 Python 以及 XlsxWriter 使用的默认 tmp 目录的权限。
- 使用
tmpdir
parameter of the constructor. 更改 XlsxWriter 使用的 tmp 目录的位置
我确实有权写入特定目录,并且文件也已创建。但是行 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})
XlsxWriter 使用 tmp 文件创建组成 xlsx 文件的 XML 文件,然后再将它们压缩到 xlsx 文件中。
您看到的错误是由于缺少 Python 在您的系统上使用的 tmp 目录的权限。请注意,此目录与创建输出文件的目录不同。
您可以在与您的应用程序相同的环境中通过 运行 找到 tmpdir 位置:
import tempfile
print(tempfile.gettempdir())
您可以通过两种方式解决此问题:
- 更改 Python 以及 XlsxWriter 使用的默认 tmp 目录的权限。
- 使用
tmpdir
parameter of the constructor. 更改 XlsxWriter 使用的 tmp 目录的位置