2011-09-17 1 views
0

つまり、distutils.dir_util.copy_tree()を使用して、ext3 fsからFAT32でフォーマットされたUSBサムドライブにデータをコピーしようとしています。ファイル名は長く、興味深い文字を含む傾向があります。これはpythonがext3のために細かく/エスケープするものです。それは脱出していないのpython FAT32サムドラ​​イブ、上に投げられますようしかし、copy_tree()を使用すると、不正な文字の一覧が突然成長し、この中の結果:複数のファイルシステムの種類を扱う:Pythonは正しくエスケープしませんか?

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

明らかモードwb?ビーイングその結果、結構です違法な性格。 copy_tree()を書き直す(またはファイル名をエスケープする)のを短くすると、別のファイルシステムのタイプで動作していることをPythonに簡単に伝える方法はありますか?

答えて

1

いいえ、Pythonは基礎となるファイルシステムについて知りません(また、そうすべきでもありません)。また、ファイル名の中で何もエスケープしません。それはあなたの仕事です。?はextファイルシステムの有効な文字です。

+0

これは意味があります、歓声。 – Murodese

2

Python(または他のユーススペースアプリケーション)は、最初の場所でファイルシステムタイプを判断できない可能性があります。シンプルな設定ではうまくいくかもしれません(しかし、非常に遅いですが)。ハードとソフトのリンクやさまざまなファイルシステムの変更があっても必然的に失敗します。FUSEやUnionFS上にFATをマウントするとどうしますか?

したがって、特定の文字を含むファイル名を持つことができないファイルシステムをお持ちの場合は、その文字を手動で削除する必要があります。

関連する問題