python写入数据到csv文件(cameraservice内存统计)

1.写入csv例程

import csv

header = ['name','age','id','phone']

data = [['armwid1',11,110,123456],
        ['armwid2',12,111,123456],
        ['armwid3',13,112,123456],
        ['armwid4',14,113,123456],
        ['armwid5',15,114,123456]]

def main():
    print('type:%s,data[0]:%s' %(type(data[0]),data[0]))
    with open("test.csv", 'wb') as f:
        csvwriter = csv.writer(f)
        csvwriter.writerow(header)
        for raw in data :
            csvwriter.writerow(raw)

if __name__ == '__main__':
    main()

运行结果:

D:\test\python>python csv_test.py
type:<type 'list'>,data[0]:['armwid1', 11, 110, 123456]
  • 上面例程特意打出了二维list的元素,仍然是list对象。
  • 使用with打开文件时,开发者就无需关心文件的关闭操作,一切由系统管理。

下面是上面脚本运行后的脚本,可以发现和预期一致。
在这里插入图片描述

2.调试遇到的坑

一开始在写例子测试时测试都没有问题,后来不知道怎么了,一直报下面的错误。

D:\test\python>python csv_test.py
['armwid1', 11, 110, 123456]
Traceback (most recent call last):
  File "csv_test.py", line 21, in <module>
    main()
  File "csv_test.py", line 15, in main
    csvwriter = csv.writer(f)
AttributeError: 'module' object has no attribute 'writer'

从上面的错误可以发现是csv模块中没有实现writer方法,这怎么可能呢。一开始还是好好的,经过近一个小时排查,突然发现有一个脚本被命名为csv.py,oh my god!真的很蛋疼,把名字改成不是系统模块的名字就可以了。
在这里插入图片描述
由此要特别注意 脚本名字不要定义成和系统模块一样的名字

3.扩展例程(cameraservice内存)

最近需要把Camera内存使用的详细数据统计出来,找到峰值内存。目前正直新型冠状高发期找到2015年的小米Note(Android M)实验了一把,脚本中有把数据导入到csv文件中。Android M的系统cameraservice还在mediaserver中,所以脚本中直接就统计mediaserver的内存数据,这里就做演示了。

操作手法:打开小米相机,拍照5次,统计cameraservice的内存使用量。

import re
import subprocess
import sys
import time
import csv

#APP_NAME = "com.android.camera"
APP_NAME = "mediaserver"

dict = {'Java Heap':            0,
        'Native Heap':          0,
        'Code':                 0,
        'Stack':                0,
        'Graphics':             0,
        'Private Other':        0,
        'System':               0,
        'TOTAL':                0,
        'TOTAL SWAP \(KB\)':    0
        }

# get process ID
def get_process_pid(str) :
    cmd2 = ('adb shell ps')
    process2 = subprocess.Popen(cmd2.split(), stdout=subprocess.PIPE)
    cmd_ret2 = process2.stdout.read()
    cmd_list = []
    cmd_list = cmd_ret2.split('\n');

    for cam in cmd_list :
        if (str in cam) :
            cam = cam.split()
            return cam[1]

def main():
    pid = get_process_pid(APP_NAME)
    print("pid:%s" %pid)
    with open("default1.csv", 'wb') as csvfile:
        csvwriter = csv.writer(csvfile)
        header = dict.keys()
        csvwriter.writerow(header)
        #print type(csvwriter)

        while (1) :
            cmd_dump = ('adb shell dumpsys meminfo %s' % pid)
            process2 = subprocess.Popen(cmd_dump.split(), stdout=subprocess.PIPE)
            cmd_result = process2.stdout.read()
            for key in  dict.keys():
                pattern = ('%s: +([0-9]*)' % key)
                match = re.search(pattern.__str__(), cmd_result)
                if match is not None :
                    dict[key] = match.group(1)
                    print(dict.values())
                    csvwriter.writerow(dict.values())

#    time.sleep(DISPLAY_CMD_WAIT)

if __name__ == '__main__':
    main()

运行后生成的csv文件如预期,实际数据如下:
在这里插入图片描述
如下是统计cameraservice使用的内存图形,可以发现有5次内存使用量的高峰,如预期操作那样。明天尝试用python画图。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值