gpt4 book ai didi

python - 结合 pandas 和 shutil 时与解码相关的错误

转载 作者:行者123 更新时间:2023-11-28 17:59:37 26 4
gpt4 key购买 nike

我正在尝试使用 shutil.copytree 和 pandas(应用功能)复制一堆目录。在检查日志时,我注意到由于以下错误而无法复制某些文件:[Errno 2] No such file or 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(独立于编码)允许不止一种表示。它可以是(Normal Form C 或 Canonical Composition)U+00CD 或 '\xcd' 或(Normal Form D 或 Canonical Decomposition)U+0049 后跟 U+0301 或 'I\u0301'。此 NFD 形式读作拉丁文大写字母,后跟组合重音符。

不可能在打印或显示的字符上区分这两种形式,但不幸的是,对于 Python 和文件系统来说,它们是不同的字符串...

如何解决:避免在文件名中使用非 ascii 字符。你现在知道为什么了......

解决方法:

  1. 您的来源包含 NFD 表格。文件系统很可能包含 NFC 形式,因此您可以尝试:

    df = pd.DataFrame({'1':['Y:\project\Test\1\RAI\xcd.pdf'],'2': 
    ['Y:\project\Test\2\RAI\xcd.pdf']})
  2. 防弹方法是询问文件系统什么字符串实际上是文件名:

    l = glob.glob('Y:\project\Test\1\RAI*.pdf')
    for name in l:
    print(name, [hex(ord(i)) for i in name])

    (注意 * 而不是 ? 因为在 NFD 形式中,单个字形可能对应于多个字符)这会将所有字符的 unicode 代码点转储为文件系统已知。如果您稍后使用完全相同的表示,一切都应该没问题。


引用文献:

关于python - 结合 pandas 和 shutil 时与解码相关的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56359322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com