0

简而言之,我正在尝试distutils.dir_util.copy_tree()将数据从 ext3 fs 复制到使用 FAT32 格式化的 USB 拇指驱动器。文件名往往很长并且包含有趣的字符——python 剥离/转义对于 ext3 很好。但是,在使用copy_tree()时,非法字符列表会突然增加,因为它被扔到 FAT32 拇指驱动器上,python 不会转义并导致以下结果:

IOError: [Errno 22] invalid mode ('wb') or filename: u'/media/usb0/data/someweirdfile.with.dots.etc?satellite=1'

显然模式wb很好,导致?是非法字符。没有重写copy_tree()(或转义文件名),有什么方法可以轻松地告诉 python 它正在处理不同的文件系统类型?

4

2 回答 2

2

Python(或任何其他使用空间应用程序)不可能首先确定文件系统类型。对于简单的设置,这可能有效(尽管速度很慢),但在更改硬链接和软链接以及各种文件系统的情况下不可避免地会失败 - 当 FAT 安装在 FUSE 或 UnionFS 上时,你会怎么做?

因此,如果您的文件系统不能包含包含特定字符的文件名,则必须手动删除该字符。

于 2011-09-17T09:46:07.190 回答
1

不,Python 不知道底层文件系统(也不应该)。它也不会转义文件名中的任何内容——这是你的工作——?恰好是 ext 文件系统的有效字符。

于 2011-09-17T09:46:24.390 回答