我有一个小脚本,它将提取.zip文件.
这很好用,但仅适用于.zip文件,它们的文件名中不包含带有“ä”,“ö”,“ü”(等等)字母的文件.
否则我收到此错误:
Exception in thread Thread-1:Traceback (most recent call last): file "threading.pyc",line 552,in __bootstrap_inner file "install.py",line 92,in run file "zipfile.pyc",line 962,in extractall file "zipfile.pyc",line 950,in extract file "zipfile.pyc",line 979,in _extract_member file "ntpath.pyc",line 108,in joinUnicodeDecodeError: 'ascii' codec can't decode byte 0x94 in position 32: ordinal not in range(128)
这是我的脚本的提取部分:
zip = zipfile.Zipfile(path1)zip.extractall(path2)
我怎么解决这个问题?最佳答案一个建议:
我这样做时收到错误:
>>> c = chr(129)>>> c + u'2'Traceback (most recent call last): file "
有一个unicode字符串传递到某处加入.
可能是zipfile的文件路径是用unicode编码的吗?
如果你这样做怎么办:
zip = zipfile.Zipfile(str(path1))zip.extractall(str(path2))
或这个:
zip = zipfile.Zipfile(unicode(path1))zip.extractall(unicode(path2))
这是ntpath中的第128行:
def join(a,*p): # 63 for b in p: # 68 path += "\" + b # 128
第二个建议:
from ntpath import *def join(a,*p): """Join two or more pathname components,inserting "\" as needed. If any component is an absolute path,all prevIoUs path components will be discarded.""" path = a for b in p: b_wins = 0 # set to 1 iff b makes path irrelevant if path == "": b_wins = 1 elif isabs(b): # This probably wipes out path so far. However,it's more # complicated if path begins with a drive letter: # 1. join('c:','/a') == 'c:/a' # 2. join('c:/','/a') == 'c:/a' # But # 3. join('c:/a','/b') == '/b' # 4. join('c:','d:/') = 'd:/' # 5. join('c:/','d:/') = 'd:/' if path[1:2] != ":" or b[1:2] == ":": # Path doesn't start with a drive letter,or cases 4 and 5. b_wins = 1 # Else path has a drive letter,and b doesn't but is absolute. elif len(path) > 3 or (len(path) == 3 and path[-1] not in "/\"): # case 3 b_wins = 1 if b_wins: path = b else: # Join,and ensure there's a separator. assert len(path) > 0 if path[-1] in "/\": if b and b[0] in "/\": path += b[1:] else: path += b elif path[-1] == ":": path += b elif b: if b[0] in "/\": path += b else: # !!! modify the next line so it works !!! path += "\" + b else: # path is not empty and does not end with a backslash,# but b is empty; since,e.g.,split('a/') produces # ('a',''),it's best if join() adds a backslash in # this case. path += '\' return pathimport ntpathntpath.join = join
总结 以上是内存溢出为你收集整理的python – zipfile提取时的unicode错误全部内容,希望文章能够帮你解决python – zipfile提取时的unicode错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)