如何读写CSV格式的文件,把结果转成CSV格式这个操作比较常见,下载下来打开是表格形式,非常方便提供给其它部门或自己分析用,我们先看如何生存一个csv文件,假设你现在有一个数据文件内容如下:
1 2 3 4 5 |
cpu, mem, disk 8,16g,200 2,4g,200 4,8g,300 16,32g,600 |
这个可能是你采集的服务器硬件信息, 把这个文件转成csv格式我们需要用到Python的csv模块,上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/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('/tmp/csv.txt') as f: for line in f: data.append(line.strip().split(",")) print data filename = "output.csv" csv_writer(data, filename) |
脚本中我们定义了一个函数负责写入到csv(output.csv)文件, 在主函数中我们先定义了一个data空列表,然后打开我们的数据文件,把数据逗号分隔后加入到列表中,最后调用csv_writer()函数把内容写到文件中,这样就完成了,output.csv文件打开是这样的:
如果你的原文件是以空格为分隔符的,那么脚本改成下面这种即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/usr/bin/env python import csv def csv_writer(data, filename): with open(filename, "wb") as csv_file: writer = csv.writer(csv_file) for line in data: writer.writerow(line) if __name__ == "__main__": data = [] with open('/tmp/csv.txt') as f: for line in f: data.append(line.strip().split(" ")) print data filename = "output.csv" csv_writer(data, filename) |
说完写,我们再说读,读一个CSV文件就比较容易了,我们还是用这个Output.csv文件,我们再把它读出来。
1 2 3 4 5 6 7 8 9 10 11 |
#/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') |
结果如下:
1 2 3 4 5 |
['cpu', ' mem', ' disk'] ['8', '16g', '200'] ['2', '4g', '200'] ['4', '8g', '300'] ['16', '32g', '600'] |
看读出csv模块以列表的形式展示了我们的结果,根据这个结果其实就可以在脚本中加入自己的逻辑来处理这些数据。
关于CSV文件的操作还有一个比较常用的就是字典写,字典数据结构是非常重要的一种数据结构,所以如果在脚本中我们最终得到的数据是一个字典,那你没必要再转成其他数据结构,直接调用csv的字典写方法就可以写入到一个文件中,我给一个简单的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/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写入,然后写入字典的数据,生成的文件结果就可以使用表格打开了。