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 に答える