web-dev-qa-db-ja.com

python TypeError:strではなくNULLバイトなしでエンコードされた文字列である必要があります

Pythonの標準ライブラリに慣れようとし、Windowsマシンでそれをいじくり回します。 python 2.7)を使用すると、ディレクトリを検索し、ファイル名から数字を削除した後、ディレクトリ内のすべてのファイルの名前を変更することを目的とした次の小さなスクリプトがあります。「」というタイプエラーが発生します。 strではなくNULLバイトのないエンコードされた文字列である必要があります」

5行目と18​​行目を呼び出します以下に記載ここで、imは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)
8
rakitin

単一のバックスラッシュの問題であることが判明しました。私はos.path.normpathがosの要求に応じてパスをフォーマットすると思いました。

1
rakitin

"... Photos\Modified\0-PyTest"

\ 0をヌル文字として使用します。あなたは逃げなければなりません\ using \\、または文字列の前にrを付けて、文字列を生にします。

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

パスのURLを指定する場合は、その前にrを追加するだけです。

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

0
0x Tps