python shutil复制中文文件decodeerror_Python:如何使用shutil.复制()使用unicode文件名...

在尝试使用Python的shutil模块复制带有复杂Unicode标题的文本文件时,遇到了decodeerror问题。代码中创建了临时文件夹,并使用shutil.copy2()尝试复制文件,但执行测试时收到错误信息。尝试了多种编码和解码方式,包括对源文件和目标文件路径进行encode('utf-8')和decode('utf-8')操作,但导致了文件找不到的IOError。问题在于正确处理Unicode文件名的方式。
摘要由CSDN通过智能技术生成

所以我几天来一直在努力解决这个问题,我就是想不通。我读了this、this和this,我觉得我一定遗漏了什么。在

我试图用以下代码将具有复杂unicode标题的简单文本文件复制到临时文件夹中:self._temp_path = tempfile.mkdtemp()

self.src = os.path.join(self._temp_path, 'src')

os.makedirs(self.src)

self.dst = os.path.join(self._temp_path, 'dst')

os.makedirs(self.dst)

self.dirname = dirname = os.path.join(os.path.dirname(__file__), 'testfiles')

f = u'file-\xe3\x82\xa8\xe3\x83\xb3\xe3\x83\x89\xe3\x83\xac\xe3\x82\xb9.txt'

src = os.path.join(dirname, f)

dst = os.path.join(self.src, f)

shutil.copy2(src, dst)

我在执行测试时收到以下消息:

^{pr2}$

我试过用这两种方法shutil.复制以及shutil.copy2号文件,他们产生了相同的结果。我也尝试过改变:shutil.copy2(src, dst)

收件人:shutil.copy2(src.encode('utf-8'), dst.encode('utf-8'))

但由于编码损坏了文件名,因此出现了此错误消息:src = '/home/phil/projects/unicode_copy/tests/testfiles/file-\xc3\xa3\xc2\x82\xc2\xa8\xc3\xa3\xc2\x83\xc2\xb3\xc3\xa3\xc2\x83\xc2\x89\xc3\xa3\xc2\x83\xc2\xac\xc3\xa3\xc2\x82\xc2\xb9.txt'

dst = '/tmp/tmpCsb3qW/src/file-\xc3\xa3\xc2\x82\xc2\xa8\xc3\xa3\xc2\x83\xc2\xb3\xc3\xa3\xc2\x83\xc2\x89\xc3\xa3\xc2\x83\xc2\xac\xc3\xa3\xc2\x82\xc2\xb9.txt'

def copyfile(src, dst):

...

> with open(src, 'rb') as fsrc:

E IOError: [Errno 2] No such file or directory: '/home/phil/projects/unicode_copy/tests/testfiles/file-\xc3\xa3\xc2\x82\xc2\xa8\xc3\xa3\xc2\x83\xc2\xb3\xc3\xa3\xc2\x83\xc2\x89\xc3\xa3\xc2\x83\xc2\xac\xc3\xa3\xc2\x82\xc2\xb9.txt'

在代码的不同点尝试了encode()和decode()的许多其他组合之后,我放弃了。声明unicode文件名并将其传递给的正确方法是什么收到吗?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值