python-2.7 - 在 Jython 中提取 zip 文件时,“TypeError:字符映射必须返回整数、无或 unicode”
问题描述
假设和我想要实现的目标
我正在使用Python2.7 (Jython)编写代码,因为我使用的是 ImageJ。
我想在 Python 2.7 中提取 zip 文件,但我做不到。
我在文件夹“OutletHDD”中有一个名为 RoiSet.zip 的 zip 文件,我想将其解压缩到文件夹“hoge”中。
遇到的问题和错误信息
Started ver2.py at Wed Dec 16 21:34:19 JST 2020
Traceback (most recent call last):
File "C:\Users\For Programming\Documents\Python Scripts\OutletHDD\ver2.py", line 12, in <module>
imp = IJ.openImage(PICPATH)
File "C:\Users\FORPRO~1\Desktop\Fiji.app\jars\jython-slim-2.7.2.jar\Lib\zipfile.py", line 1038, in extractall
File "C:\Users\FORPRO~1\Desktop\Fiji.app\jars\jython-slim-2.7.2.jar\Lib\zipfile.py", line 1026, in extract
File "C:\Users\FORPRO~1\Desktop\Fiji.app\jars\jython-slim-2.7.2.jar\Lib\zipfile.py", line 1059, in _extract_member
TypeError: character mapping must return integer, None or unicode
at org.python.core.Py.TypeError(Py.java:236)
at org.python.modules._codecs.translateCharmap(_codecs.java:446)
at org.python.core.PyUnicode.unicode_translate(PyUnicode.java:2126)
at org.python.core.PyUnicode$unicode_translate_exposer.__call__(Unknown Source)
at org.python.core.PyObject.__call__(PyObject.java:465)
at zipfile$py._extract_member$45(C:/Users/FORPRO~1/Desktop/Fiji.app/jars/jython-slim-2.7.2.jar/Lib/zipfile.py:1081)
at zipfile$py.call_function(C:/Users/FORPRO~1/Desktop/Fiji.app/jars/jython-slim-2.7.2.jar/Lib/zipfile.py)
at org.python.core.PyTableCode.call(PyTableCode.java:173)
at org.python.core.PyBaseCode.call(PyBaseCode.java:187)
at org.python.core.PyFunction.__call__(PyFunction.java:449)
at org.python.core.PyMethod.__call__(PyMethod.java:171)
at zipfile$py.extract$43(C:/Users/FORPRO~1/Desktop/Fiji.app/jars/jython-slim-2.7.2.jar/Lib/zipfile.py:1026)
at zipfile$py.call_function(C:/Users/FORPRO~1/Desktop/Fiji.app/jars/jython-slim-2.7.2.jar/Lib/zipfile.py)
at org.python.core.PyTableCode.call(PyTableCode.java:173)
at org.python.core.PyBaseCode.call(PyBaseCode.java:187)
at org.python.core.PyFunction.__call__(PyFunction.java:449)
at org.python.core.PyMethod.__call__(PyMethod.java:171)
at zipfile$py.extractall$44(C:/Users/FORPRO~1/Desktop/Fiji.app/jars/jython-slim-2.7.2.jar/Lib/zipfile.py:1037)
at zipfile$py.call_function(C:/Users/FORPRO~1/Desktop/Fiji.app/jars/jython-slim-2.7.2.jar/Lib/zipfile.py)
at org.python.core.PyTableCode.call(PyTableCode.java:173)
at org.python.core.PyBaseCode.call(PyBaseCode.java:306)
at org.python.core.PyBaseCode.call(PyBaseCode.java:141)
at org.python.core.PyFunction.__call__(PyFunction.java:426)
at org.python.core.PyMethod.__call__(PyMethod.java:141)
at org.python.pycode._pyx23.f$0(C:/Users/For Programming/Documents/Python Scripts/OutletHDD/ver2.py:13)
at org.python.pycode._pyx23.call_function(C:/Users/For Programming/Documents/Python Scripts/OutletHDD/ver2.py)
at org.python.core.PyTableCode.call(PyTableCode.java:173)
at org.python.core.PyCode.call(PyCode.java:18)
at org.python.core.Py.runCode(Py.java:1687)
at org.python.core.__builtin__.eval(__builtin__.java:497)
at org.python.core.__builtin__.eval(__builtin__.java:501)
at org.python.util.PythonInterpreter.eval(PythonInterpreter.java:255)
at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:57)
at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:31)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
at org.scijava.script.ScriptModule.run(ScriptModule.java:157)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:165)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:124)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:63)
at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:225)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Started New_.py at Wed Dec 16 21:37:42 JST 2020
源代码。
import zipfile
from ij.plugin.frame import RoiManager
from ij.process import ImageProcessor
zippath = "C:\Users\For Programming\Documents\Python Scripts\OutletHDD\RoiSet.zip"
ZipObj = zipfile.ZipFile(zippath)
ZipObj.extractall("C:\Users\For Programming\Documents\Python Scripts\OutletHDD\hoge") #Unzip and move the Zip file
ZipObj.close()
我试过的
我以为可能是unicode类型、str类型的bug,我想尝试做str()、unicode()等,但是没有成功。
附加信息(固件/工具版本等)
我从日本写代码(可能与字符代码有关)
Windows10 64位
2.7.2 (v2.7.2:925a3cc3b49d, Mar 21 2020, 10:12:24) [Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)]
我想了解这方面的任何信息,如果我的信息不足,请告诉我
解决方案
也许将提取路径转换为 ascii 可以解决该错误?示例:"C:\Users\For Programming\Documents\Python Scripts\OutletHDD\hoge".encode("ascii")
推荐阅读
- java - Java中的泛型问题
- django - DRF - django_filters - 使用自定义方法
- laravel - 是否可以在 HTML 选择标签中添加表单作为选项?
- javascript - 带有 upsert 的猫鼬 updateOne 不起作用
- c# - Blazor 在导航时传递数据
- python - 在 pandas 中使用值作为名称变量
- vue.js - 导航抽屉 - 如何声明我的链接?
- python - Python import Julia 导致脚本的其他部分冻结
- progressive-web-apps - PWA,如何在 iOS 上捏和放大网站内容?
- tibco - 如何在 TIBCO 的发送 HTTP 请求活动中传递“x-www-form-urlencoded”POSTMAN 参数?