python写入csv新列数据_python:读取csv,执行命令并将结果写入新的垂直列

我对python完全陌生,我读到python的csv模块非常适合Id所做的事情。

我花了一些时间尝试了几种不同的方法,但还不能使用第四列(垂直)创建数组。

我有一个包含数百行的四列csv文件。在我继续之前,我可能应该验证python甚至可以完成所有Id想做的事情。读取csv文件

对文件的第四列(垂直)执行命令

命令打印

读取每一行是否正常(来自命令)

在新的第五列上正常写入所有五列的新文件

循环到文件的第一个空行

示例文件(在单元格视图中以逗号分隔)HOST PLATFORM ARCH COMMAND

server1 win x86_64 python '/root/server1.py'

server2 linux x86_64 python '/root/server2.py'

server3 linux x86_64 python '/root/server3.py'

示例命令# python '/root/server1.py'

--------------------

Error: Could not open /root/server1.py

# python '/root/server2.py'

--------------------

server2 p1 (NTFS) output1:100 output:200 HEALTHY:Yes

--------------------

# python 'root/server3.py'

--------------------

server3 p1 (linux) output1:100 output:200 HEALTHY:No

server3 p2 (linux) output1:100 output:200 HEALTHY:Yes

server3 p3 (swap) output1:100 output:200 HEALTHY:No

--------------------

如果多行健康和所有不等于是,健康等于“否”

如果在任何行上都没有发现健康,健康等于“错误扫描”

这就是我目前所拥有的#!/usr/bin/python

#

import csv

import subprocess

# read csv file

csv_file = open("my_list.csv", "rb")

my_csv_reader = csv.reader(csv_file, delimiter=",")

my_data_list = []

for row in my_csv_reader:

print row

my_data_list.append(row)

csv_file.close()

# write csv file

csv_file = open("new_data.csv", "wb")

my_csv_writer = csv.writer(csv_file, delimiter=",")

for row in my_data_list:

my_csv_writer.writerow(row)

csv_file.close()

# running commands, getting output

# run COMMAND column from csv_file, use "python 'my_script.py'" for now

# my_script.py only for now: print "HEALTHY:Yes"

p = subprocess.Popen("python '/root/my_script.py'",stdout=subprocess.PIPE,stderr=subprocess.PIPE)

output, errors = p.communicate()

print output

print errors

执行上述:# python '/root/this_script.py'

['HOST', 'PLATFORM', 'ARCH', 'COMMAND']

['server1', 'win', 'x86_64', "python '/root/server1.py'"]

['server2', 'linux', 'x86_64', "python '/root/server2.py'"]

['server3', 'linux', 'x86_64', "python '/root/server3.py'"]

Traceback (most recent call last):

File "thisscript.py", line 24, in ?

p = subprocess.Popen('python myscript1.py',stdout=subprocess.PIPE,stderr=subprocess.PIPE)

File "/usr/lib64/python2.4/subprocess.py", line 550, in __init__

errread, errwrite)

File "/usr/lib64/python2.4/subprocess.py", line 993, in _execute_child

raise child_exception

OSError: [Errno 2] No such file or directory

奖金:

如果我想在stdout/command输出中搜索一些内容(如linux、swap、NTFS等,上面提到的第三个示例命令),并将其附加到行[5]中,或者在它已经搜索了[I]health[/I]之后的下一行。。。我试着启动一个新的if语句,但它似乎只追加了行[4],或者与为[i]health[/i]追加的行相同。

我也不知道如何使用OR语句。其中if 'Linux' OR 'swap' OR 'LVM' in stdout:

writer.writerow(row + ['Linux']) # for multiple lines/partitions.

elif 'BSD' in stdout:

writer.writerow(row + ['BSD'])

elif 'NTFS' in stdout:

writer.writerow(row + ['Windows'])

else:

writer.writerow(row + ['Error Scanning'])

最后,我将命令列更改为路径,并修改命令以执行路径。这是有效的。我想执行第二个命令来获取路径的文件大小。我试过几种方法。

谢谢你抽出时间。我希望这一切都能实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值