首页 > 解决方案 > os.path.isfile(Path/to/image) 给出 False 而 os.path.isdir(/directory image is in is true)

问题描述

...

from google.colab import drive
drive.mount('/content/drive', force_remount=True)

# Commented out IPython magic to ensure Python compatibility.
# %cd /content

!ls

!cat ttt.txt

!ls

Path2 = "/content/drive/MyDrive/foop/train/"
Path1 = "/content/drive/MyDrive/food-101/images/"

#print(os.path.isdir(Path2))
for i in range(len(L)):
  #path1 = str(Path1) + str(L[i]) + str('/') #+ str(Train[i][1])
  path2 = str(Path2) + str(L[i]) + str('/') #+ str(Train[i][1])
  print(path2)
  print(os.path.isdir(path2))
  if not os.path.exists(path2):
    os.makedirs(path2)

  print(os.path.exists(path2))
  
    
  




'''
for i in range(len(Train)%100):
  path1 = str(Path1) + str(Train[i][0]) + str('/') #+ str(Train[i][1])
  path2 = str(Path2) + str(Train[i][0]) + str('/') #+ str(Train[i][1])
  path1 = str(path1)
  path2 = str(path2)
  #print(os.path.isdir(path1))
  #print(os.path.isdir(path2))
  if not (os.path.isdir(path2)):
    #pass
    #!mkdir path2
  #print(os.path.isdir(path1))
  print(os.path.isdir(path2))
  #!cp path1 path2
  #shutil.copy(path1, path2)
'''

for i in range(len(Train)):
  path1 = str(Path1) + str(Train[i][0]) + str('/') + str(Train[i][1])
  path2 = str(Path2) + str(Train[i][0]) + str('/') + str(Train[i][1])
  path1 = str(path1)
  path2 = str(path2)
  #print(os.path.isdir(path1))
  #print(os.path.isdir(path2))
  #print(os.path.isdir(path2))
    #pass
    #!mkdir path2
  #print(str(Train[i][1]))
  #print(os.path.isdir(path1))
  if (str(Train[i][0])=="baklava"):
    #print(str(Train[i][1])) 
    **print(os.path.isfile(Path1+"/"+"baklava"+"/"+"1117620.jpg"))**
  #!cp path1 path2
  #shutil.copy(path1, path2)

...

错误是:

os.path.isdir(Path1+"/"+"baklava"+"/") 给出 True

但-

os.path.isfile(Path1+"/"+"baklava"+"/"+"1117620.jpg") 给出 False

我也按照另一个答案中的建议尝试了这个:

...
P2 = os.path.join('/content', 'drive', 'MyDrive', 'foop', 'train')

P1 = os.path.join('/content', 'drive', 'MyDrive', 'food-101', 'images')
for i in range(len(Train)):
  #path1 = str(Path1) + str(Train[i][0]) + str('/') + str(Train[i][1])
  #path2 = str(Path2) + str(Train[i][0]) + str('/') + str(Train[i][1])
  #path1 = str(path1)
  #path2 = str(path2)
  #print(path1)
  #print(os.path.isfile(path1))
  #print(os.path.isdir(path2))
  #print(os.path.isdir(path2))
    #pass
    #!mkdir path2
  #print(str(Train[i][1]))
  #print(os.path.isdir(path1))
    #print(str(Train[i][1])) 
    
  #!cp path1 path2
  #shutil.copy(path1, path2)
  P = os.path.join(P1, str(Train[i][0]), str(str(Train[i][1] + '.jpg')))
  print(os.path.isdir(P1))
  print(P)
  print(os.path.isfile(P))
...

输出 -

真 /content/drive/MyDrive/food-101/images/waffles/888311.jpg 假真 /content/drive/MyDrive/food-101/images/waffles/903293.jpg 假真 /content/drive/MyDrive/food- 101/images/waffles/923472.jpg 假真 /content/drive/MyDrive/food-101/images/waffles/940186.jpg 假真 /content/drive/MyDrive/food-101/images/waffles/948929.jpg 假真 /content/drive/MyDrive/food-101/images/waffles/957965.jpg 假真 /content/drive/MyDrive/food-101/images/waffles/97524.jpg 假真 /content/drive/MyDrive/food- 101/images/waffles/98131.jpg 假 真 /content/drive/MyDrive/food-101/images/waffles/982668.jpg 假

也为此

... P2 = os.path.join('/content', 'drive', 'MyDrive', 'foop', 'train')

P1 = os.path.join('/content', 'drive', 'MyDrive', 'food-101', 'images')
for i in range(len(Train)):
  #path1 = str(Path1) + str(Train[i][0]) + str('/') + str(Train[i][1])
  #path2 = str(Path2) + str(Train[i][0]) + str('/') + str(Train[i][1])
  #path1 = str(path1)
  #path2 = str(path2)
  #print(path1)
  #print(os.path.isfile(path1))
  #print(os.path.isdir(path2))
  #print(os.path.isdir(path2))
    #pass
    #!mkdir path2
  #print(str(Train[i][1]))
  #print(os.path.isdir(path1))
    #print(str(Train[i][1])) 
    
  #!cp path1 path2
  #shutil.copy(path1, path2)
  P = os.path.join(P1, str(Train[i][0]), str(str(Train[i][1] + '.jpg')))
  PP1 = os.path.join(P1, str(Train[i][0]))
  PP2 = os.path.join(P2, str(Train[i][0]))
  print(os.path.isdir(P1))
  print(os.path.isdir(PP1))
  print(os.path.isdir(PP2))
  print(P)
  print(os.path.isfile(P))

...

Output :
True for isdir() false for isfile() 
'''
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/1002167.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/1012802.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/102284.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/1034768.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/1045631.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/1068834.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/1096319.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/1113665.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/1126334.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/1140791.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/114959.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/1169507.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/1184113.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/119195.jpg
False
True
True
True
/content/drive/MyDrive/food-101/images/takoyaki/1216488.jpg
False

'''

标签: pythonpytorchgoogle-colaboratory

解决方案


正如 Kemp 所说,您应该检查路径实际上是否指向现有文件。无论如何,您应该检查Pathlib而不是os.path. 在使用路径时,它将为您节省大量时间。


推荐阅读