2016-09-12 2 views
0

私が書いていたコードの中にバグが見つかりましたが、実際には盗聴されていませんでしたか?os.walkはエスケープされていないバックスラッシュで動作しますか?

for folderName, subfolders, filenames in os.walk('C:\FOLDER'): 
print('The current folder is ' + folderName) 
for subfolder in subfolders: 
    print('SUBFOLDER OF ' + folderName + ': ' + subfolder) 
for filename in filenames: 
    print('FILE INSIDE ' + folderName + ': '+ filename) 

for folderName, subfolders, filenames in os.walk('C:\\FOLDER'): 
print('The current folder is ' + folderName) 
for subfolder in subfolders: 
    print('SUBFOLDER OF ' + folderName + ': ' + subfolder) 
for filename in filenames: 
    print('FILE INSIDE ' + folderName + ': '+ filename) 

シェルの両方の仕事と完全なコードが正常に動作しますか?最初のものは、それを食べているので詰まってはいけないのですか?「C:OLDER」?

答えて

5

Pythonは認識されないエスケープシーケンスを無視し、元の円記号と文字をそのまま残します。あなたの文字列リテラルF続くリテラル\バックスラッシュが含まれていますので、

\Fは、有効なエスケープシーケンスではありません。

>>> 'C:\FOLDER' 
'C:\\FOLDER' 
+0

注:この頼っは悪い考えです。ウィンドウパスリテラルには生の文字列を使用します。 'r'C:\ FOLDER''なので、いくつかはフォルダ名を小文字にすることを決めるときにbarfではなく、突然' C: older'という名前のフォルダを歩こうとしています。最終的には、最終的にはこの恐ろしい "機能"([Python bug#27364](https://bugs.python.org/issue27364)を参照)を廃止し、再び生の文字列を適切に使用することで廃止予定の問題を回避できます。 – ShadowRanger

関連する問題