2016-03-21 5 views
0

os.path.isfile(path)メソッドをテストして、何かがファイルであるかどうかを確認しています。不思議なことに私はパスとファイル名を結合するとtrueを返しますが、完全なファイルパスを入れるとfalseを返します。どうしてこれなの?勝利7 iPythonノートPython 2.7 os.path.isfile

+0

を逃れるos.path.joinの出力を検査( 'C:USRNAME \ドキュメント\ \ユーザー'、 'test.xlsx') – kingdaemon

答えて

3

パス内の\tはタブ文字であり、2文字のスラッシュtではないためです。生の文字列を使用します。

path = r'C:\Users\usrname\Documents\test.xlsx' 

またはセパレータ

path = 'C:\\Users\\usrname\\Documents\\test.xlsx' 
+0

はありがとうございました!私はこれが他の誰かを助けることを望む。 – Mateyobi

0

import os 

path = 'C:\Users\usrname\Documents\test.xlsx' 

if os.path.isfile(os.path.join('C:\Users\usrname\Documents','test.xlsx')): #returns yes 
    print 'yes' 
else: 
    print 'no' 

if os.path.isfile(path): #returns no 
    print 'yes' 
else: 
    print 'no' 

のPython 2.7 os.path.joinパスを修正するためにあなたのパス文字列を変換するので:

「C:\\ユーザー\\ USRNAME \\ \\ドキュメントtest.xlsx '

2

\tはタブに変換されています。

import os 
path = 'C:\Users\usrname\Documents\test.xlsx' 
print path 

# C:\Users\usrname\Documents est.xlsx 

path = os.path.join('C:\Users\usrname\Documents', 'test.xlsx') 
print path 

# C:\Users\usrname\Documents\test.xlsx 

完全にエスケープ文字の問題を回避するために、私はちょうどos.path.joinを使用して、完全に文字列を構築することをお勧め。

base_dir = os.path.join('C:', 'Users', 'usrname', 'Documents') 
print base_dir 

# C:\Users\usrname\Documents 

path = os.path.join(base_dir, 'test.xlsx') 
print path 

# C:\Users\usrname\Documents\test.xlsx