尝试删除具有Unicode名称的文件夹

时间:2015-04-17 15:51:39

标签: python windows python-2.7 unicode

#! /usr/bin/env python

import os
import sys

if len(sys.argv) < 2:
     print 'Need to force directories into sys.argv'

     #sys.argv += ["C:\Users\Andy\Desktop"]
     #sys.argv += ["C:\Users\Andy\Desktop\Webpages"]
     sys.argv += ["C:\Users\Andy\Desktop\Downloads (2)"]

def removeEmptyFolders(path):
  if not os.path.isdir(path):
    return

  # remove empty subfolders
  files = os.listdir(path)
  if len(files):
    for f in files:
      fullpath = os.path.join(path, f)
      if os.path.isdir(fullpath):
        removeEmptyFolders(fullpath)

  # if folder empty, delete it
  files = os.listdir(path)
  if len(files) == 0:
    print "Removing empty folder:", path
    os.rmdir(path)

for x in sys.argv[1:]:
     print 'Scanning directory "%s"....' % x
     removeEmptyFolders(x)
     print 'Done.'

我正在尝试使用此代码删除空文件夹,但它没有检测到包含»和▶等字符的文件夹...

我已尝试在unicode()中包含所有路径变量,但返回的内容如下:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 37, in <module>
  File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 27, in removeEmptyFolders
  File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 27, in removeEmptyFolders
  File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 32, in removeEmptyFolders
  File "C:\Program Files (x86)\Wing IDE 101 5.0\bin\2.7\src.zip\debug\tserver\dbgutils.py", line 1491, in write
UnicodeEncodeError: 'cp932' codec can't encode character u'\xbb' in position 54: illegal multibyte sequence

我已经完成了

reload(sys)
sys.setdefaultencoding("utf-8")

但这也无济于事。没有Unicode() - s,它只会让我:

Need to force directories into sys.argv
Scanning directory "C:\Users\Andy\Desktop\Downloads (2)"....
Done.
Traceback (most recent call last):
  File "C:\Users\Andy\Desktop\Delete Empty Folders.py", line 959, in <module>
AttributeError: 'file' object has no attribute '_FixGetPass'

使用Unicode() - s ...它与没有默认编码更改的情况相同。

注意:我正在使用Wing IDE。

我应该切换到Python 3吗?

1 个答案:

答案 0 :(得分:2)

使用unicode作为路径是正确的解决方案;如果您将unicode值传递给os.listdir(),则会生成unicode个文件名,并且一切正常。

您的追溯实际上是由print声明引起的:

print "Removing empty folder:", path

哪个WingIDE尝试编码以供网络使用,但由于您的系统编码(代码页932)无法对路径中的某些字符进行编码而失败。

您可以使用repr()来代替该部分:

print "Removing empty folder:", repr(path)

因为这至少为您提供了一个可调试的路径表示,其中任何不可打印的非ASCII字符都被转义码替换。