简而言之,我正在尝试使用distutils.dir_util.copy_tree()
将数据从ext3 fs复制到使用FAT32格式化的USB拇指驱动器。文件名往往很长并且包含有趣的字符 - 对于ext3来说,python strip / escapes很好。但是,在使用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它正在处理不同的文件系统类型?
答案 0 :(得分:2)
Python(或任何其他使用空间应用程序)不可能首先确定文件系统类型。对于简单的设置,这可能会起作用(尽管速度很慢),但在更改硬链接和软链接以及各种文件系统时不可避免地会失败 - 当FAT安装在FUSE或UnionFS上时,您会怎么做?
因此,如果您的文件系统不能包含特定字符的文件名,则必须手动删除该字符。
答案 1 :(得分:1)
不,Python不了解底层文件系统(也不应该)。它也不会逃避文件名中的任何内容 - 这是你的工作 - ?
恰好是ext文件系统的有效字符。