1

以下のスクリプトをPython2.xでコンパイルしました。このスクリプトは、ディレクトリを再帰的に検索し、見つかったJPEGごとに、メタデータを解析して辞書に配置します。現在、出力は単にコンソールに出力されます:-

import os
import fnmatch
import pyexiv2

matches = []
dict1 = {}

# The aim of this script is to recursively search across a directory for all
# JPEG files. Each time a JPEG image is detected, the script used the PYEXIV2
# module to extract all EXIF, IPTC and XMP data from the image. Once extracted
# the key (ie. "camera make" is generated and it's respective value
# (ie. Canon) is then added as the value in a dictionary.

for root, dirnames, filenames in os.walk('C:\Users\XXX\Desktop'):
  for filename in fnmatch.filter(filenames, '*.jpg'):
      matches.append(os.path.join(root, filename))

for entry in matches:
    metadata = pyexiv2.ImageMetadata(entry)
    metadata.read()
    keys = metadata.exif_keys + metadata.iptc_keys + metadata.xmp_keys
    for key in keys:
        dict1[key] = metadata[key].raw_value

    print entry
    print str(dict1)

私が探しているのは、結果をMySQLDBに出力することです。さて、私の問題は、メタデータヘッダーの無期限のリストがなく、実際に1つを見つけるのに苦労していることです。そのため、テーブルの行ヘッダーについて、辞書キーの各値(つまり、日付)を比較しようとしています。取得、作成、モデル化など)、テーブルに存在しない場合は、ヘッダーとしてテーブルに追加し、EXIFデータ(キー値)をそれぞれの列に入力します。私は以前にPythonを介してMySQLを試してみましたが、行ヘッダーを比較したり、変数から新しいヘッダーを動的に作成したりすることはありませんでした。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

1

file新しいデータ キーを MySQL テーブルの新しい列として追加する代わりに、3 つの列を持つ単一の固定テーブルを作成し、data_nameファイルdata_valueごとに動的データを持つことができます。

次に、テーブルを簡単にクエリできます。

select file from file_data where data_name = 'Serial' and data_value = 'ABCDE'

複数のフィールドに一致する場合は、自己結合を行うことができます。

SELECT * from data t1 JOIN data t2 on t1.file_name = t2.file_name and t1.data_name = "data1" and t1.data_value="value1" and t2.data_name = "data2" and t2.data_value="value2" 

または、列を MySQL テーブルに動的に追加し続けることもできます。

ALTER TABLE data ADD Serial VARCHAR(60);

を使用して既存の列名を取得できます

SHOW COLUMNS FROM `data`; 

したがって、新しいデータ フィールドが表示されるたびに、それを列として追加します。

于 2012-05-23T17:41:04.877 に答える