2016-10-13 64 views
0
import pyexiv2 
import os 

print "Enter the full path to the directory that your images are conatined in." 
print "-------------------------------------------" 
newFileObj = open('C:\\users\\wilson\\desktop\\Metadata.csv', 'w') 
targ_dir = raw_input('Path: ') 

targ_files = os.listdir(targ_dir) 

def getEXIFdata (imageFile): 
    if imageFile.endswith(".db"): 
     f = 1 
    else: 

     EXIFData = pyexiv2.ImageMetadata(imageFile) 
     EXIFData.read() 
     CamMake = EXIFData['Exif.Image.Make'] 
     DateTime = EXIFData['Exif.Image.DateTime'] 
     CamModel = EXIFData['Exif.Image.Model'] 
    for image in targ_files: 
     getEXIFdata(targ_dir+"\\"+img) 
     newFileObj.write(DateTime+' , '+CamMake+' , '+CamModel+'\r\n') 
newFileObj.close() 

end = raw_input("Press Enter to Finish: ") 

這是我到目前爲止,但我只是不明白如何實際獲取數據到文件中。它整理文件,但它只是空白。我嘗試過在底部移動,但我似乎無法讓它工作。我是python的新手,所以請當你提示我應該做什麼的時候保持簡單。如何將exif數據提取到csv文件中?

+0

打開輸出文件後,從中創建一個['csv.writer'](https://docs.python.org/2/library/csv.html#csv.writer)對象,然後調用該對象的['writerow()'](https://docs.python.org/2/library/csv.html#csv.csvwriter.writerow)方法爲你想創建的每一行csv。夠簡單? – martineau

+0

我也強烈建議你閱讀並遵循[PEP 8 - Python代碼風格指南](https://www.python.org/dev/peps/pep-0008/)。 – martineau

+0

你沒有調用你的'getEXIFdata()'函數。裏面的代碼永遠不會執行。 –

回答

0

如果您想獲取exif的數據,請使用.value來獲取數據的值。 這裏是一個例子。這個像這樣的代碼

python exif2csv.py -i wifi.jpg -o demo_csv.csv 

如果你想在目錄循環文件

# -*-coding:utf-8-*- 
import sys 
import csv 
import os 
import argparse 
import pyexiv2 

def main(): 
    parser = argparse.ArgumentParser(description="Change the txt file to csv.") 
    parser.add_argument("-i", action="store", dest="infile") 
    parser.add_argument("-o", action="store", dest="outfile") 
    parser_argument = parser.parse_args() 

    fatherdir = os.getcwd() # code directory 
    inputfile = outputfile = None 

    # input exif file 
    if parser_argument.infile: 
     infilepaths = os.path.split(parser_argument.infile) 
     # 'C:\User\lenovo\Desktop\pakistan.txt' ---> ['C:\User\lenovo\Desktop','pakistan.txt'] 
     if infilepaths[0]: # full path 
      inputfile = parser_argument.infile 
      fatherdir = infilepaths[0] 
     # 'pakistan.txt' ---> ['','pakistan.txt'] 
     else: # only file name 
      inputfile = fatherdir + '/' + parser_argument.infile 
    # output csv file 
    if parser_argument.outfile: 
     outfilepaths = os.path.split(parser_argument.outfile) 
     if outfilepaths[0]: # full path 
      outputfile = parser_argument.outfile 
     else: 
      outputfile = fatherdir + '/' + parser_argument.outfile 
    else: 
     outputfile = fatherdir + '/test_csv.csv' 
    parse(inputfile, outputfile) 


def parse(inputfile, outputfile): 
    csvcontent = file(outputfile, 'wb') 
    writer = csv.writer(csvcontent) 

    exif_data = getEXIFdata(inputfile) 
    writer.writerow([exif_data['Exif.Image.Orientation'].value, 
        exif_data['Exif.Photo.PixelXDimension'].value, 
        exif_data['Exif.Photo.PixelYDimension'].value]) 
    # for line in open(inputfile).readlines(): 
    #  writer.writerow([a for a in line.split('\t')]) 

    csvcontent.close() 

def getEXIFdata (imageFile): 
    if imageFile.endswith(".db"): 
     print 'Skip this file' 
    else: 
     exif_data = pyexiv2.ImageMetadata(imageFile) 
     exif_data.read() 
     for s, v in exif_data.items(): 
      print s, v 
     cam_a = exif_data['Exif.Image.Orientation'].value 
     cam_b = exif_data['Exif.Photo.PixelXDimension'].value 
     cam_c = exif_data['Exif.Photo.PixelYDimension'].value 
     # add exif value 
     ekey = 'Exif.Photo.UserComment' 
     evalue = 'A comment.' 
     exif_data[ekey] = pyexiv2.ExifTag(ekey, evalue) 
     #metadata.write() 
     return exif_data 

if __name__ == '__main__': 
    main() 

來說,我認爲你可以自己看着辦吧。

相關問題