私は信じられないほどのPandastableを使用して、csvファイルからjpeg exifデータを表示しようとしています。PandaTablesとExif - 必要に応じて列を追加する
def load_file():
fname = askopenfilename(filetypes=(("JPEG/TIFF files", "*.jpg;*.tiff"),
("All files", "*.*")))
f = open(fname,'r')
fdata.update(exifread.process_file(f, details=False))
with open('tempdata.csv', 'a') as f:
w = csv.DictWriter(f, fdata.keys(),extrasaction="raise")
w.writeheader()
w.writerow(fdata)
datatable.importCSV('tempdata.csv')
私の問題は、各ファイルは、可変データフィールドを持っているということですのでIMG1:私はCSVファイルに書き込むし、次のコードでtk.buttonクリックでPandastableでインポート、exifreadでこれらのファイルを処理しています50個のフィールドを持つことができますが、img2は51個のフィールドを持つ可能性があります。これにより、次のエラーが発生します。
CParserError:データをトークン化するエラー。 Cエラー:13行目の50個のフィールドが見えます。
だから、img2に余分なデータフィールドがあると、それがテーブルに追加されます。
私は自分の辞書にすべてのデータフィールドのリストを作成しようとしましたが、exifreadが動作するため、これは多くのバリエーションがあります。これを他のファイルタイプにも拡張して、これを維持しにくくすることを望んでいます。
他の同様の質問のほとんどが回答として持っているので、私はこれらの列を無視したくありません。
これらの列をどのように追加することができますか?
こんにちはMattR、お返事ありがとうございます。 Pandastableは何らかの理由でデータフレームの周りを動かすつもりはないので、私は明確にしようとします。 私はファイルを開くたびに、{'image_size': '1024x768' ....}のようなものをdictとして与えるモジュールexifreadで処理します。 これをcsvファイルに書きたいと思います。 pandastableモジュールを使用して表示します。私は別のファイルを開き、それを処理してそのCSVファイルに追加したいと思います。 残念ながら、img2にimg1より多くの列がある場合は、上記のエラーをスローします。ですから、もしpythonがimg2の中でもっと多くの列を検出するなら、idはそれらをCSVに追加するのが好きです。 – Retro
辞書を['pandas.DataFrame.from_dict'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.from_dict.html)、マージ/連結(いずれか適切です)新しいデータフレームと私の答えと同じロジックを使用します。それはまったく役に立ちますか? – MattR
ありがとうMattR、あなたの提案は私に正しい方向を正確に指摘 - 私はそれをやり直してしまい、私がそれを管理した方法で私の答えを編集するでしょう。 もう一度おねがいします! – Retro