【问题标题】:python TypeError: must be encoded string without NULL bytes, not strpython TypeError:必须是没有NULL字节的编码字符串,而不是str
【发布时间】:2012-09-17 11:30:40
【问题描述】:

尝试熟悉 python 的标准库并在我的 Windows 机器上对其进行一些处理。使用python 2.7,我有以下小脚本,旨在查看目录并在从文件名中删除数字后重命名其中的所有文件。我收到一个类型错误,上面写着“必须是没有 NULL 字节的编码字符串,而不是 str”

它调用了第 5 行和第 18 行,如下所示,我使用的是 os.path.exists。

任何帮助将不胜感激!

    import os, re, string, glob

    path = os.path.normpath('C:\Users\me\Photo Projects\Project Name\Project Photos\Modified\0-PyTest')

ln5:if os.path.exists(path):
        print "path exists at " + path
        for file in glob.glob(os.path.join(path, '*.jpg')):
            new_path = os.path.join(os.path.dirname(file), re.sub('\d', '', os.path.basename(file)))
line18:     if not os.path.exists(new_path):
                os.rename(file, new_path)

【问题讨论】:

标签: windows scripting python-2.7


【解决方案1】:

原来是单反斜杠问题。 我认为 os.path.normpath 会按照操作系统的要求格式化路径。

【讨论】:

    【解决方案2】:

    "...照片\修改\0-PyTest"

    它把 \0 作为一个空字符。你必须使用\\ 转义\,或者只是在字符串前加一个r 以使其原始:

    r'C:\Users\me\Photo Projects\Project Name\Project Photos\Modified\0-PyTest'
    

    【讨论】:

      【解决方案3】:

      如果您要提供路径 url,只需在其前面添加 r :

      (r'E:\Images\1.png')

      【讨论】:

      • 嗨,欢迎来到 SO!这个问题很老了,已经用非常相似的回复回答了,所以没有必要再发一次。毫无疑问,会有其他人有新问题需要您的帮助。
      猜你喜欢
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      相关资源
      最近更新 更多