这篇我们接上一篇把文件操作接着写完,上篇我们介绍了文件的读写,在最后我们了解到了生成一个文件需要用到write()函数,现在我们介绍另一个写入文件的方式, 在shell下我们都知道有个echo命令, 它可以方便的将我们的文本写入或追加到一个文件中,在python下也有类似的方法,如果我们open了一个文件f,用以下语法就可以写入到这个文件中,类似echo命令:


>>> print >>f, 'some strings you want to write'


这个命令就可以把这个字符串追加到这个文件中,了解了这个方法,我们就可以在我们脚本中,将生成的结果直接重定向到我们的文本中,生成我们要的结果,但这种方法其实还有另一个用法,比如动态生成脚本,就是根据你输入的参数不同,生成的shell脚本也不同,这样可以很灵活的完成不同功能,比如要备份某些台机器的文件,你可以输入源和目的,自动生成一个shell脚本,然后调用去执行:


#!/usr/bin/python env


import os

import os.path


def create_shell(src,des):

    if os.path.exists('./do.sh'):

        os.remove('./do.sh') 

    with open('do.sh', 'a') as f:

        print >>f, '#!/bin/bash'

        print >>f, 'rsync -avzP {0} 1.1.1.1:{1}/ '.format(src,des )


if __name__ == '__main__':

    create_shell('/data','/data')


这个脚本运行完会审生成一个do.sh的脚本文件,内容如下:


#!/bin/bash

rsync -avzP /data 1.1.1.1:/data/



这个脚本是动态生成的,根据你输入的参数不同,生成的脚本内容也不同。

这个内容就介绍到这里,接下来我看看如何读写CSV格式的文件,把结果转成CSV格式这个操作比较常见,下载下来用打开是表格形式,非常方便提供给其它部门或自己分析用,我们先看如何生存一个csv文件,假设你现在有一个数据文件内容如下:

cpu, mem, disk

8,16g,200

2,4g,200

4,8g,300

16,32g,600


这个可能是你采集的服务器硬件信息, 把这个文件转成csv格式我们需要用到Python的csv模块,上代码:


#!/usr/bin/env python


import csv


def csv_writer(data, filename):

    with open(filename, "wb") as csv_file:

        writer = csv.writer(csv_file, delimiter=',')

        for line in data:

            writer.writerow(line)


if __name__ == "__main__":

    data = []

    with open('data.txt') as f:

        for line in f:

            data.append(line.strip().split(","))

    print data

    filename = "output.csv"

    csv_writer(data, filename)


脚本中我们定义了一个函数负责写入到csv文件, 在主函数中我们先定义了一个data空列表,然后打开我们的数据文件,把数据逗号分隔后加入到列表中,最后调用csv_writer()函数把内容写到文件中,这样就完成了,output.csv文件打开是这样的:



说完写,我们再说读,读一个CSV文件就比较容易了,我们还是用这个Output.csv文件,我们再把它读出来.


#/usr/bin/env python


import csv

 

def csv_reader(fi):

    reader = csv.reader(open(fi))

    for line in reader:

        print line

 

if __name__ == "__main__":

    csv_reader('output.csv')


结果如下:


['cpu', ' mem', ' disk']

['8', '16g', '200']

['2', '4g', '200']

['4', '8g', '300']

['16', '32g', '600']



看读出csv模块以列表的形式展示了我们的结果,根据这个结果其实就可以在脚本中加入自己的逻辑来处理这些数据。

关于CSV文件的操作还有一个比较常用的就是字典写,字典数据结构是非常重要的一种数据结构,所以如果在脚本中我们最终得到的数据是一个字典,那你没必要再转成其他数据结构,直接调用csv的字典写方法就可以写入到一个文件中,我给一个简单的例子:

#!/usr/bin/env python


import csv


d = {'a':1, 'b':2,'c':3,'d':4,'f':5}


f = open('dict2csv.csv', 'wt')


dict_writer = csv.DictWriter(f, fieldnames = d.keys())


dict_writer.writeheader()


dict_writer.writerow(d)


f.close()


在脚本中我直接定义了一个字典d,然后到打开一个csv文件, 调用csv.DictWriter()去写入,注意这个函数有2个参数,第一个文件文件对象,第二个是字典的Key, 然后写入头部就是把key写入,然后写入字典的数据,生成的文件结果是这样的:

python基础11-文件读写part2_java