2016-02-13 58 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() 
相关问题