2016-02-13 73 views
1

我需要從多個JPG文件的圖像標題信息提取到一個文本或日誌文件,但是當我運行下面的代碼,我收到一個錯誤:保存圖像頭信息到一個文本文件

for root, dirs, filenames in os.walk(topdir): 
    for f in filenames: 
    print(topdir) 
    print(f) 
    log = open(topdir + f, 'r') 
    data = p.get_json(log) 
    formatted_data =((json.dumps(data, sort_keys=True,indent=4, separators=(',', ':')))) 
    print(data) 
    print ("There are " + str(len(header_dict)) + " items on the menu.") 

我得到當我運行了以下錯誤:

C:/Users/richie/Desktop/work/imagej/test images and files/XX1 
image_D2016-02-03T15-27-56-763207Z_4.jpg 
Traceback (most recent call last): 
File "C:\Users\richie\Desktop\work\header_dir.py", line 25, in <module> 
log = open(topdir + f, 'r') 
FileNotFoundError: [Errno 2] No such file or directory: 'C:/Users/richie/Desktop/work/imagej/test images and files/XX1image_D2016-02- 03T15-27-56-763207Z_4.jpg' 

如何打開圖像文件,以允許在for循環的功能,對其運行?

+0

日誌=打開(TOPDIR + 「/」 + F, 'R') –

回答

1

你的問題在於此代碼;

topdir + f 

首先,你應該使用join的路徑,而不是+。後者不會在路徑和文件之間插入分隔符。 其次,你應該加入一個文件名爲root,而不是topdir

for root, dirs, files in os.walk(topdir): 
    paths = [os.path.join(root, f) for f in files] 
    for p in paths: 
     log = open(p) 
     # et cetera 
+0

感謝您的 - 修改我的代碼,但我得到了下面的錯誤,這是我猜測是與圖像文件的實際解析有關:Traceback(最近調用最後一個): 文件「C:\ Users \ richie \ Desktop \ work \ header_dir.py」,第27行,在 data = p。 get_json(log) AttributeError:'str'對象沒有屬性'get_json' –

+0

對不起 - 最後一條評論錯誤 - 我得到的錯誤是:回溯(最後最近一次調用): 文件 「C:\用戶\任賢齊\桌面\工作\ header_dir.py」 25行,在 數據= x.get_json(日誌) 文件「C:\ Python的\ Python35 -32 \ lib \ site-packages \ pyexifinfo \ pyexifinfo.py「,第44行,在get_json中 filename = os.path.abspath(filename) 文件」C:\ Python \ Python35-32 \ lib \ ntpath.py「 ,第535行,在abspath中 path = _getfullpathname(path) TypeError:_getfullpathname:路徑參數的非法類型 –

+0

我打印了賦值給log的值 - '<_io.TextIOWrapper name ='C:/ Users/richie/Desktop/work/imagej/test images and files/XX1 \\ image_D2016-02-03T15-27-56-763207Z_4.jpg'mode ='r'encoding ='cp1252'>'。看起來問題在於路徑。 –

0

工作代碼:

import pyexifinfo as x 
import json 
import os 
from tkinter import * 
from tkinter.filedialog import askopenfilename 

def askdirectory(): 
dirname = filedialog.askdirectory() 
return dirname 

topdir = askdirectory() 

for root, dirs, files in os.walk(topdir): 
paths = [os.path.join(root, f) for f in files] 
for p in paths: 
    data = x.get_csv(p) 
    print(p) 
    print(data) 
    formatted_data =((json.dumps(data, sort_keys=True,indent=4, separators=(',', ':')))) 
    f = open('Xheader_info_XML.txt','a') 
    f.write(p) 

    f.write(formatted_data) 

f.close()