2016-05-17 17 views
0

私のプログラムは、指定されたパスから開始し、そのサブディレクトリからjpegを探してキャプチャした日付で整理することになっています。私のプログラムは、サブディレクトリ内のファイルを開こうとするとエラーに陥っています。ファイルが見つからないと言います。現在のディレクトリを印刷し始めたとき、サブディレクトリにないことがわかりました。私のコードとエラーは以下の通りです。 os.walkを次のサブディレクトリに変更するにはどうすればよいですか?おかげos.walkの現在のディレクトリを変更する方法

import os 
import exifread 
from datetime import datetime 

class Image(object): 
    name = "" 
    dateTakem = "" 

    # The class "constructor" - It's actually an initializer 
    def __init__(self, name, dateTaken): 
     self.name = name 
     self.dateTaken = dateTaken 

def makeImage(name, dateTaken): 
    img = Image(name, dateTaken) 
    return img 

def formatDateTime(imageDt): 
    d = datetime.strptime(imageDt, '%Y:%m:%d %H:%M:%S') 
    dateStr = d.strftime('%Y:%m:%d') 
    return dateStr 

#path = raw_input("Please enter path name: ") 
path="/Users/Me/Pictures/Litmas"#For faster testing 
if not os.path.exists(path): 
    print ("Input path does not exist. Path is being created..") 
    try: 
     os.makedirs(path) 
    except (IOError, OSError) as exception: 
     print ("Path could not be created") 
    else: 
     print ("Success! Path has been created") 
os.chdir(path) 
count=0 
unique=0 
uniList=[] 
imgList=[] 
cwd = os.getcwd() 
print (cwd) 
for (dirname, dirs, files) in os.walk('.', topdown=False): 
    imgList[:]=[] 
    uniList[:]=[] 
    print (imgList) 
    print (uniList) 
    for filename in files: 
     #Checks if it is a JPEG 
     if filename.endswith('.jpg') or filename.endswith('.JPG') or filename.endswith('.JPEG') or filename.endswith('.jpeg'): 
      print ("\n"+filename) 
      #Adds 1 for every picture processed 
      count+=1 
      cwd = os.getcwd() 
      print (cwd) 
      #opens jpeg for exifread 
      f = open(filename, 'rb') 
      #Gets all the tags needed 
      tags = exifread.process_file(f, details=False) 
      #Goes through tags to find date captured 
      for tag in tags.keys(): 
       #Converts date object to string 
       dtStr=str(tags['EXIF DateTimeOriginal']) 
       #Strips time so it is just date 
       fDate = formatDateTime(dtStr) 
       fDate=fDate.replace(":","-") 
      print (fDate) 
      #Creates Image instance 
      newImg=makeImage(filename,fDate) 
      #Adds date to list for unique 
      uniList.append(fDate) 
      #Adds image instance to list for images 
      imgList.append(newImg) 
    uniList=list(set(uniList)) 
    unique+=len(uniList) 
    print ("Destination folders will be created with these filenames: ") 
    print (uniList) 
    #for folder in uniList: 
     #current=os.getcwd() 
     #newPath=current+"/"+folder 
     #try: 
      #os.makedirs(newPath) 
     #except (IOError, OSError) as exception: 
      #print ("Path could not be created") 
    #for image in imgList: 
     #filename=image.name 
     #dateDest=image.dateTaken 
     #current=os.getcwd() 
     #newDest=current+"/"+dateDest+"/"+filename 
     #currDest=current+"/"+filename 
     #os.rename(currDest, newDest) 

print ("Total JPEGs Processed: ") 
print(count) 
print ("Total Unique Dates Processed: ") 
print(unique) 

私の誤りでした:

Traceback (most recent call last): 

File "./Challenge.py", line 56, in <module> 

    f = open(filename, 'rb') 

IOError: [Errno 2] No such file or directory: 'DSC_0063.jpg' 
+0

'filename'だけで全体のパスを、ファイル名を与えなく、試す' F =オープン(os.path.join(ルート、ファイル名) 、 'rb') ' –

答えて

0

あなたができることの一つは、そうfilename = os.path.join(dirname, filename)ようos.path.joinを使用してディレクトリを含めるように変更filenameです。または、ファイルを開く前にに現在のディレクトリをos.chdir(dirname)で変更することもできます。ただし、os.walk(".")を使用する場合の後者の方法は、documentationではお勧めしません。ディレクトリを変更することはないので、ユーザーはどちらもそうでないとみなします。

注:相対パス名を渡す場合、)(散歩のコンテニュー間の現在の作業ディレクトリを変更しないでください。 walk()は現在のディレクトリを決して変更せず、その呼び出し元がどちらもしないとみなします。

0

os.walk戻り、タプル:現在のディレクトリへのパス、現在のディレクトリと現在のディレクトリ内のファイルのリストにあるディレクトリのリストを。

だから、あなたはそれらのファイルを開くために必要なものは以下です:

f = open(os.path.join(dirname, filename), 'rb') 
関連する問題