私は、Windows上のいくつかのフォルダとファイルを管理するためにpython2を使用しています。python 2読み込みファイル名にWindowsが含まれていますか?
私のWindowsエンコーディングはGBK
です。ほとんどのファイルでpath.decode('gbk')
が問題ありません。
例コード:
from __future__ import unicode_literals, absolute_import
from pathlib2 import Path
from six import text_type, binary_type
def text(string, encodings=['utf8', 'gbk']):
if isinstance(string, text_type):
return string
elif isinstance(string, binary_type):
for encoding in encodings:
try:
return string.decode(encoding)
except UnicodeDecodeError:
pass
else:
raise Exception('Can not decode with %s' % encodings)
else:
return text_type(string)
root = Path('./data')
for x in root.iterdir():
if x.is_dir():
print text(x.parts[1])
ではなく、いくつかのファイル名のために働く:このようなこのラインif x.is_dir()
で、♣
が含まれているとして
は、エラーにDIRチェックアウト
File "e:\Workspace\PixivUtil2\StorageManager.py", line 50, in __init__
self.refresh()
File "e:\Workspace\PixivUtil2\StorageManager.py", line 90, in refresh
if x.is_dir():
File "D:\Python27\lib\site-packages\pathlib2.py", line 1463, in is_dir
return S_ISDIR(self.stat().st_mode)
File "D:\Python27\lib\site-packages\pathlib2.py", line 1257, in stat
return self._accessor.stat(self)
File "D:\Python27\lib\site-packages\pathlib2.py", line 481, in wrapped
return strfunc(str(pathobj), *args)
WindowsError: [Error 123] : 'data\\464063 - ?3'
コメントをスローします直接ファイルを書くには
[Errno 22] invalid mode ('wb') or filename: u'data\\464063 - ?3\\11111111.txt'
は、GBK
には含まれていないので、?
と表示されるため、Windowsのcmdでは表示できません。
しかし、この問題を正しく処理する方法は?私はフォルダ名を読んでその下にファイルを作成したい。それが問題のように見える
Python 3にアップグレードするか、パスに頼らずに手動で作業する必要があります。 –
@Burhan Khalid私が依存しているlibはpython2のみです。python3に変換するのは難しいので、タイトルでpython 2を強調しています。 – Mithril