我试图用shutil.copytree和pandas(apply函数)复制一堆目录。在查看日志时,我注意到由于以下错误,有些文件无法复制:[Errno 2]没有这样的文件或directory:PATH. 即使路径名有效。经进一步检查,似乎是́ 字符已在\xb4中更改,这解释了找不到文件的原因
我试着遵循这篇文章中的建议: Pandas convert object column to str - column contains unicode, float etc 通过尝试将列转换为unicode。但是,这会导致以下错误: UnicodeDecodeError:'ascii'编解码器无法解码位置20中的字节0xcc:序号不在范围内(128)
import pandas as pd
import shutil
def copy_files(row):
try:
shutil.copy(row['1'], row['2'])
return 'DONE'
except Exception as e:
return str(e)
df = pd.DataFrame({'1':['Y:\project\Test\1\RAÍ.pdf'],'2':
['Y:\project\Test\2\RAÍ.pdf']})
df['errors'] = df.apply(copy_files, axis=1)
print(df['errors'][0])
我希望字符串“DONE”会被打印出来,但是我得到了错误消息:
[Errno 2]没有这样的文件或目录:“Y:\project\Test\x01\RAI\xcc\x81.pdf”
编辑:
如果像这样使用原始字符串文字:
df = pd.DataFrame({r'1':[r'Y:\project\Test\1'],
'2':[r'Y:\project\Test\2']})
def copy_files(row):
try:
shutil.copytree(row['1'], row['2'])
return 'DONE'
except Exception as e:
return str(e)
df['errors'] = df.apply(copy_files, axis=1)
print(df['errors'][0])
我仍然得到以下结果:
[('Y:\project\Test\1\RAI\xb4i.pdf', 'Y:\project\Test\2\RAI\xb4i.pdf', "[Errno 2] No such file or directory: 'Y:\\project\\Test\\1\\RAI\xb4i.pdf'")]
你从哪儿弄来的那些人物?看来你的名字里有个“带锐音符的拉丁文大写字母I”。问题是UNICODE(独立于编码)允许多个表示。它可以是(正规形式C或标准组合)U+00CD或
'\xcd'
或(正规形式D或标准分解)U+0049,后跟U+0301或'I\u0301'
。这个NFD表格读作拉丁文大写字母I,后跟组合锐音符无法在打印或显示的字符上区分这两种形式,但不幸的是,对于Python和文件系统来说,它们是不同的字符串
如何修复:避免在文件名中使用非ascii字符。你现在知道为什么了
解决方法:
你的来源包含NFD表格。文件系统可能包含NFC表单,因此您可以尝试:
防弹方法是询问文件系统文件名实际上是什么字符串:
(注意
*
而不是?
,因为在NFD格式中,单个glyph可以对应多个字符),它将转储文件系统已知的所有字符的unicode码点。如果你以后使用完全相同的表示法,事情应该会很顺利参考文献:
相关问题 更多 >
编程相关推荐