Python写入CSV

时间:2018-02-08 14:17:49

标签: python csv

我想将用户和上次日志导出到csv文件,但我只从文件中获取连接的最后一行而不是所有ssh响应

import yaml
import os
import functools
import datetime


csv_file = open(filename,'w+')
csv_file.write("%s,%s,%s,%s\n" % ('name' , 'ssh_ec2user' , 'ssh_centosuser' , 'ssh_nginx_log'))
csv_file.flush()
for instance in running_instances:
    if (instance.tags == None or instance.tags == ""): continue
    for tag in instance.tags:
        if 'Name' in tag['Key']:
            name = tag['Value']
            print(name)
            instance_private_ip = (instance.private_ip_address)
            print(instance_private_ip)
ssh_ec2user = os.system("ssh -t -t -i %s -n -o StrictHostKeyChecking=no ec2-user@%s 'sudo touch last.txt;sudo  chmod 777 last.txt;sudo last > last.txt; sudo grep -v user last.txt |head -n3'" % (identity_file , instance_private_ip))
ssh_centosuser = os.system("ssh -t -t -i %s -n -o StrictHostKeyChecking=no centos@%s 'sudo touch last.txt;sudo  chmod 777 last.txt;sudo last > last.txt; sudo grep -v centos last.txt |head -n3'" % (identity_file , instance_private_ip))
ssh_nginx_log = "test nginx"
print(ssh_ec2user,user, ssh_nginx_log)
csv_file.write("\'%s\',\'%s\',\'%s\',\'%s\'\n" %(name,ssh_ec2user,ssh_centosuser,ssh_nginx_log))csv_file.flush()

例如每行我需要回复: 用户pts / 0 172.21.0.114 1月25日星期四12:30 - 13:38(01:08)
用户pts / 0 172.21.2.130 1月17日星期三15:11 - 15:17(00:05)
用户pts / 0 172.21.2.130 Wed Jan 17 09:27 - 09:46(00:18)
连接到1.1.1.1关闭。 65280 0

测试nginx

并且在文件中只有一个recive: 65280 0

我如何输入所有anwser的同一行: 用户pts / 0 172.21.0.114 1月25日星期四12:30 - 13:38(01:08)
用户pts / 0 172.21.2.130 1月17日星期三15:11 - 15:17(00:05)
用户pts / 0 172.21.2.130 Wed Jan 17 09:27 - 09:46(00:18)
连接到1.1.1.1关闭。 65280 0

TNX

1 个答案:

答案 0 :(得分:0)

使用csv库。

import csv

writer = csv.writer(csv_file)

writer.writerow(['name' , 'ssh_ec2user' , 'ssh_centosuser' , 'ssh_nginx_log'])
...
writer.writerow([name,ssh_ec2user,ssh_centosuser,ssh_nginx_log])

输出不会在同一行,但会被正确转义,这样如果用Excel或OpenCal打开它或类似的将会正确显示。

你也可以拥有','字符串中的字符,不会弄乱格式。