#! /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吗?
答案 0 :(得分:2)
使用unicode
作为路径是正确的解决方案;如果您将unicode
值传递给os.listdir()
,则会生成unicode
个文件名,并且一切正常。
您的追溯实际上是由print
声明引起的:
print "Removing empty folder:", path
哪个WingIDE尝试编码以供网络使用,但由于您的系统编码(代码页932)无法对路径中的某些字符进行编码而失败。
您可以使用repr()
来代替该部分:
print "Removing empty folder:", repr(path)
因为这至少为您提供了一个可调试的路径表示,其中任何不可打印的非ASCII字符都被转义码替换。