尝试删除具有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吗?

马丁·彼得斯(Martijn Pieters)

使用unicode路径是正确的解决方案。如果您将unicode传递os.listdir()它将产生unicode文件名,并且一切都会正常进行。

您的回溯实际上是由您的print陈述引起的

print "Removing empty folder:", path

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

您可以repr()改用以下方法解决该部分

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何删除具有特定名称的文件夹

删除文件夹中除具有特定名称的文件夹外的所有文件夹

如何使用Perl rmtree删除具有Unicode字符文件名的文件夹?

Shell脚本:当不存在具有相同名称的文件夹时删除文件

从某个目录中删除具有特定名称的文件和文件夹

如何使用Powershell删除具有特定名称的所有文件夹

批处理命令删除所有具有特定名称的子文件夹

删除ntfs驱动器上所有具有特定名称的文件夹

Powershell删除具有特定名称的子文件夹

如何在Python中删除具有特定名称的文件夹?

CMD如何成功创建和删除具有DOS设备名称的文件夹

删除不同子目录中具有相同名称的文件夹的内容

在 Powershell 中删除具有序列化名称的文件夹

Linux:如何删除文件夹中除具有特定名称的文件以外的所有文件?

删除具有特定模式的文件夹中的文件

从具有指定文件夹名称的文件夹结构中获取文件名

递归查找,但具有特定的子文件夹名称

具有不同文件夹名称的mongodump

如何删除名称中带有\的文件夹?

按名称删除所有文件夹

msbuild复制具有相同文件夹名称的整个文件夹

在子文件夹中找到具有特定名称的空文件夹?

需要一个bat文件来删除具有唯一名称的文件夹

批处理命令删除所有具有特殊字符的特定名称的子文件夹

删除具有无限项的文件夹

删除具有空特定子文件夹的父文件夹

将文件从单个文件夹移动到具有文件名等名称的现有文件夹

尝试删除载波文件夹

将文件从多个文件夹复制到新文件夹-文件具有相同的名称