0

実行時に適切な出力値を取得するのに問題があります

print metadata["File:FileSize"]

エラーが発生しますlist indices must be a integer, not strjson.loads辞書を返すと思いました。

変数metadataは、次のようにクラス内の exiftool から取得されます。

def get_metadata(self, *filenames):
    return json.loads(self.execute("-G", "-j", "-n", *filenames))

メインのプログラム フローでは、次のようにします。

metadata = exif.get_metadata(fileName)
print metadata
print metadata["File:FileSize"]

誰かが私が間違っていることを理解するのを手伝ってくれますか?

生の exiftool クエリのサンプルを次に示します。

[{
  "SourceFile": "/media/mango/MF-HDD-277/01_audio/Computer Arts royalty-free audio samples/Disc 191 - soundsnap/ComputerArtsDisc191_SoundSnapSamples_088_Bend03.wav",
  "ExifTool:ExifToolVersion": 9.13,
  "File:FileName": "ComputerArtsDisc191_SoundSnapSamples_088_Bend03.wav",
  "File:Directory": "/media/mango/MF-HDD-277/01_audio/Computer Arts royalty-free audio samples/Disc 191 - soundsnap",
  "File:FileSize": 146948,
  "File:FileModifyDate": "2010:10:24 11:17:20-04:00",
  "File:FileAccessDate": "2014:01:29 15:58:48-05:00",
  "File:FileInodeChangeDate": "2014:01:21 13:28:00-05:00",
  "File:FilePermissions": 711,
  "File:FileType": "WAV",
  "File:MIMEType": "audio/x-wav",
  "RIFF:Encoding": 1,
  "RIFF:NumChannels": 2,
  "RIFF:SampleRate": 44100,
  "RIFF:AvgBytesPerSec": 176400,
  "RIFF:BitsPerSample": 16,
  "Composite:Duration": 0.833038548752834
}]
4

1 に答える 1

2

生のクエリは、配列内の JavaScript オブジェクトを返しています。で JSON を解析するとjson.loads、リスト内の辞書が取得されます。したがって、属性にアクセスするには、 を実行しますmetadata[0]["File:FileSize"]

またはget_metadata、dict を直接返すようにメソッドを変更します。

def get_metadata(self, *filenames):
    return json.loads(self.execute("-G", "-j", "-n", *filenames))[0]

いいえ、json.loads辞書を返すだけではありません。Tim がコメントでリンクしたは、JSON から Python への変換を指定しています。

于 2014-03-11T14:19:30.913 に答える