2

djangoアプリでcsvファイルの処理を行う必要があります。
csvkitについて聞いたのですが、かなりかっこいいですね。
githubページ

試してみたいのですが、csvkitをモジュールとして使う方法がわかりません。具体的には、CSVJSONユーティリティを使用したいと思います。私はそれにcsvファイル(そしてうまくいけば他のいくつかの引数)を渡す必要がありますが、これを行う方法を完全に理解することはできません。
CSVJSONドキュメント

ユーティリティにアップロードされたcsvファイルを渡したいのですが、アップロードされたファイルはメモリ(十分に小さい場合)または一時ストレージ領域にある可能性があります。CSVJSONは、ファイルパスまたはストリームを使用しているように見えます。CSVJSONがそれを消費できるようにするために、アップロードされたファイルに対して私が何をする必要があるかを誰かが教えてくれれば、それは素晴らしいボーナスになります。

django 1.3では、form_validメソッドで作業を行うことを計画しています。

Pythonのスキルを持っている人が、私が何をする必要があるかを教えてくれることを願っています。ありがとう

4

1 に答える 1

5

次のコードを使用して、CSVKitJSONクラスをインポートできます。

from csvkit.utilities.csvjson import CSVJSON

CSVKitクラスは2つのコンストラクターオプションを取ります。1つ目はコマンドライン引数リストで、2つ目は出力ストリームです。出力ストリームが提供されていない場合は、標準出力に出力されます。

argparserモジュールは、コマンドライン引数を解析するために使用されるため、ドキュメントが役立ちます。短いバージョンでは、実際のコマンドラインで使用する引数の生の文字列をスペースで分割するのと同じです。例えば:

$ csvjson --key Date /path/to/input/file

次のように翻訳されます:

from csvkit.utilities.csvjson import CSVJSON
args = ["--key", "Date", "/path/to/input/file"]
CSVJSON(args).main()

入力ファイルから読み取りたくないが、コマンドラインから入力ファイルをstdinに渡すことができない場合は、sys.stdinオブジェクトをメモリ内のバージョンに置き換えることができます。唯一の規定は、オブジェクトが入力ファイルのように動作する必要があるということです。input_stringという変数にCSVファイルの文字列バージョンがあると仮定すると、StringIOライブラリを使用して文字列バッファを作成できます。

import StringIO
import sys
new_stdin = StringIO.StringIO(input_string)
sys.stdin = new_stdin
args = ["--key", "Date"]
CSVJSON(args).main()

最後に、stdoutではなくファイルに出力する場合は、開いているファイルオブジェクトを2番目のパラメーターとして渡します。

output_file = open("/path/to/output.txt", "w")
CSVJSON(args, output_file).main()
output_file.close()

ファイルオブジェクトを自分で閉じるまで、バッファはフラッシュされないことを忘れないでください。CSVJSONはあなたのためにそれを閉じません。

于 2012-06-18T04:59:46.743 に答える