0

http サーバーから値を取得し、データを csv 形式に変更する python スクリプトを作成しようとしています。httplib2 ライブラリを使用してリクエストを実行していますが、コンテンツが application/x に返されることが問題です。 -www-form-urlencoded 形式です。データを dict として解析するためのコードがありますが、この種の文字列としては何もできないようです。私ができるように、広範なユーザーにとっては単純に見えるかもしれません。これについては調べても情報が出てこないようです...

以下は、私がやろうとしていることの種類と私の問題を説明するためのサンプルコードです

import httplib2
http = httplib2.Http()

resp, content = http.request("http://example.com/foo/bar")

お手伝いありがとう

ところで、私はpython 2.7を使用しており、リクエストが自然に返す形式はjsonです

4

1 に答える 1

2

エンコードされた応答を受信して​​いる場合は、 を使用urllib.unquoteして、エスケープされた文字を「実際の」表現に置き換えることができます。これを行うと、モジュールを使用しjsonて文字列を Python オブジェクトとしてロードし、csvモジュールを使用して応答に基づいて CSV を作成できます。応答の構造によって、これがどのように設定されるかが決まりますが、うまくいけば、これで正しい道に進むことができます。

In [1]: import csv

In [2]: import json

In [3]: import urllib

In [4]: json_resp = urllib.quote('[{"name": "John Doe", "age": 35}, {"name": "Jane Doe", "age": 33}]')

In [5]: json_resp # What I believe your response looks like
Out[5]: '%5B%7B%22name%22%3A%20%22John%20Doe%22%2C%20%22age%22%3A%2035%7D%2C%20%7B%22name%22%3A%20%22Jane%20Doe%22%2C%20%22age%22%3A%2033%7D%5D'

In [6]: resp = urllib.unquote(json_resp) #'Unquote' the response

In [7]: resp
Out[7]: '[{"name": "John Doe", "age": 35}, {"name": "Jane Doe", "age": 33}]'

In [8]: content = json.loads(resp) # Turn the resp into a Python object

In [9]: fieldnames = ('name', 'age') # Specify the order in which to write fields

In [10]: with open('mycsv.csv', 'wb') as f:
   ....:     writer = csv.DictWriter(f, fieldnames)
   ....:     writer.writeheader() # Python 2.7+
   ....:     for item in content:
   ....:         writer.writerow(item)
   ....:
   ....:

これにより、次のような CSV が書き込まれます。

name,age
John Doe,35
Jane Doe,33
于 2012-12-03T15:35:20.667 に答える