python rarfile不支持unicode_python – zipfile提取时的unicode错误

一个建议:

我这样做时收到错误:

>>> 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 path

import ntpath

ntpath.join = join

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值