思路:
先把多個JSON元素轉換成數組,然後使用python的csv和json子產品來處理。
範例格式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<code>[</code>
<code>{</code>
<code> </code><code>"description": null,</code>
<code> </code><code>"image": {</code>
<code> </code><code>"image_size": 20,</code>
<code> </code><code>"os_family": "centos",</code>
<code> </code><code>"platform": "linux",</code>
<code> </code><code>"image_name": "tomcat-V1.7-基礎鏡像-V2",</code>
<code> </code><code>"provider": "self",</code>
<code> </code><code>"image_id": "xxxxxxxxx",</code>
<code> </code><code>"processor_type": "64bit",</code>
<code> </code><code>"ui_type": "tui"</code>
<code> </code><code>},</code>
<code> </code><code>"instance_name": "幽幽",</code>
<code> </code><code>"transition_status": "",</code>
<code> </code><code>"sub_code": 0,</code>
<code> </code><code>"lastest_snapshot_time": "",</code>
<code> </code><code>"cpu_topology": "",</code>
<code> </code><code>"memory_current": 4096,</code>
<code> </code><code>"vxnets": [],</code>
<code> </code><code>"status": "ceased",</code>
<code> </code><code>"vcpus_current": 2,</code>
<code> </code><code>"instance_id": "i-xxxxxx",</code>
<code> </code><code>"instance_type": "c2m4",</code>
<code> </code><code>"instance_class": 0,</code>
<code> </code><code>"dns_aliases": [],</code>
<code> </code><code>"create_time": "2015-03-17T02:06:57Z",</code>
<code> </code><code>"owner": "xxxxxxxxxxxx",</code>
<code> </code><code>"status_time": "2015-03-17T04:14:49Z",</code>
<code> </code><code>"alarm_status": ""</code>
<code> </code><code>}</code>
<code>]</code>
使用方法:
<code>python json2csv.py </code><code>/tmp/test</code><code>.json </code><code>/tmp/test</code><code>.csv instance_id,instance_name,create_time,vcpus_current,memory_current,status,status_time image</code>
處理結果如下:
i-xxxxxx,xxxxxx,2015-03-17T02:18:34Z,2,4096,ceased,2015-03-17T04:22:04Z,tui,64bit,xxxxxxxxxxxxxxxxxx,20,xxxxxxxx,linux,centos,self
直接上代碼
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<code>#!/usr/bin/env python</code>
<code># -*- coding: utf-8 -*-</code>
<code>import</code> <code>json</code>
<code>import</code> <code>csv</code>
<code>import</code> <code>fcntl</code>
<code>import</code> <code>time </code>
<code>import</code> <code>sys </code>
<code>reload</code><code>(sys) </code>
<code>sys.setdefaultencoding(</code><code>'utf8'</code><code>)</code>
<code># 讀檔案句柄</code>
<code>f_read </code><code>=</code> <code>open</code><code>(sys.argv[</code><code>1</code><code>])</code>
<code>data </code><code>=</code> <code>json.load(f_read)</code>
<code>f_read.close()</code>
<code># 寫檔案句柄</code>
<code>f_write</code><code>=</code><code>open</code><code>(sys.argv[</code><code>2</code><code>],</code><code>'wb+'</code><code>)</code>
<code>f</code><code>=</code><code>csv.writer(f_write)</code>
<code># 檔案鎖</code>
<code>fcntl.flock(f_write,fcntl.LOCK_EX)</code>
<code># 讀接下來的變量</code>
<code>del</code> <code>sys.argv[</code><code>0</code><code>]</code>
<code># 層級存儲要讀取的KEY到清單中</code>
<code>if</code> <code>len</code><code>(sys.argv)></code><code>0</code><code>:</code>
<code> </code><code>m1</code><code>=</code><code>sys.argv[</code><code>0</code><code>].split(</code><code>','</code><code>)</code>
<code> </code><code>del</code> <code>sys.argv[</code><code>0</code><code>]</code>
<code>else</code><code>:</code>
<code> </code><code>m1</code><code>=</code><code>[]</code>
<code> </code><code>m2</code><code>=</code><code>sys.argv[</code><code>0</code><code>].split(</code><code>','</code><code>)</code>
<code> </code><code>m2</code><code>=</code><code>[]</code>
<code> </code><code>m3</code><code>=</code><code>sys.argv[</code><code>0</code><code>].split(</code><code>','</code><code>)</code>
<code> </code><code>m3</code><code>=</code><code>[]</code>
<code># 存儲所有要讀取的KEY</code>
<code>all_keys</code><code>=</code><code>m1</code><code>+</code><code>m2</code><code>+</code><code>m3</code>
<code># 列印表頭</code>
<code>#print ','.join(all_keys)</code>
<code>#f.writerow(all_keys) </code>
<code># 逐一列印元素</code>
<code>for</code> <code>item </code><code>in</code> <code>data:</code>
<code> </code><code>x</code><code>=</code><code>[]</code>
<code> </code><code>for</code> <code>z </code><code>in</code> <code>all_keys:</code>
<code> </code><code>if</code> <code>z </code><code>in</code> <code>m1:</code>
<code> </code><code>x</code><code>+</code><code>=</code><code>[</code><code>str</code><code>(item[z]).encode(</code><code>'utf-8'</code><code>, </code><code>'ignore'</code><code>)]</code>
<code> </code><code>if</code> <code>z </code><code>in</code> <code>m2:</code>
<code> </code><code>x</code><code>+</code><code>=</code><code>item[z].values()</code>
<code> </code><code>#print ','.join(x)</code>
<code> </code><code>f.writerow(x)</code>
<code>fcntl.flock(f_write,fcntl.LOCK_UN)</code>
<code>f_write.close()</code>
<code></code>
本文轉自xiaoyuwang 51CTO部落格,原文連結http://blog.51cto.com/wangxiaoyu/1655783:,如需轉載請自行聯系原作者