2015-04-17 43 views
1
#! /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名稱刪除文件夾

我試着在封閉的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() - ...沒一樣不默認編碼變化。

注:我使用Wing IDE。

我應該只是切換到Python 3?

+0

那麼你在'dbgutils'中有哪些代碼會觸發編碼錯誤?爲什麼涉及這個功能呢?使用unicode正是這個函數應該使用的。 –

+0

@MartijnPieters - 我還沒有用dbgutils完成_anything_ ......我甚至不知道它是什麼......除了最可能的:「調試實用程序」... – Malandy

+0

對,它是你的IDE的調試工具也許?你沒有在這裏包含完整的回溯,所以我甚至無法開始幫助調試該問題。 –

回答

2

使用unicode作爲路徑是正確的解決方案;如果您將unicode的值傳遞給os.listdir(),它將生成unicode文件名,並且所有內容都按其應有的方式工作。

你回溯實際上是由您的print說法引起:

print "Removing empty folder:", path 

這WingIDE試圖編碼網絡使用,並未能爲您的系統編碼(代碼頁932)不能編碼某些字符在你的路。

您可以解決一部分使用repr()代替:至少是

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

,因爲這讓你與轉義代碼代替任何不可打印非ASCII字符的路徑的可調試表示。

+0

是的...它適用於Unicode() - s ...這是我需要的所有工作......但是,你知道默認編碼更改中的FixGetPass是關於什麼嗎? – Malandy

+0

@Malandy你的腳本959行是什麼?你粘貼的版本幾乎沒有那麼多行。 – Random832

+0

@Malandy:我不知道;這發生在你在這裏發佈的代碼之外。在代碼打印完成後的某個地方。 –

相關問題