csv Python:类型错误:只能将字符串(不是“list”)连接到字符串

wgmfuz8q  于 2022-12-15  发布在  Python
关注(0)|答案(1)|浏览(148)

我在这里做了一些研究,但找不到我想要的确切答案。所以我想我应该寻求一些支持。我一直在编写一个python脚本,它将搜索CSV并检查最后一列是否为“真”。如果是,那么它检索的ID和主机名。下面我已经张贴的代码和错误。任何帮助将不胜感激!我相信它'这是一个简单的问题......
可能不应该是我的目标。我试图让这部分列出每个主机名与这个“命令”。甚至有办法做到这一点或没有?

COMMANDS = ("get 'C:\\" + HOSTNAME_HOST + ".zip'")

下面是CSV:

hostname,id,enabled
WIN10_PC,asdfasdfasdfasdfasdfasdf,TRUE
WIN_Server,asdfasdfasdfasdfasdfasdf,TRUE

下面是该脚本的示例:

import csv

AIDS_TO_EXECUTE = []
HOSTNAME_HOST = []
with open('hosts_to_execute.csv', 'rt') as csvfile:
    data = csv.reader(csvfile, delimiter=',')
    for hostname, aid, enabled in data:
        if enabled == 'TRUE':
            AIDS_TO_EXECUTE.append(aid)
            HOSTNAME = (hostname)
            HOSTNAME_HOST.append(HOSTNAME)
            
COMMANDS = ("get 'C:\\" + HOSTNAME_HOST + ".zip'")

#print(COMMANDS)

print(HOSTNAME_HOST)

我收到的错误:

Traceback (most recent call last):
  File "test.py", line 13, in <module>
    COMMANDS = ("get 'C:\\" + HOSTNAME_HOST + ".zip'")
TypeError: can only concatenate str (not "list") to str
rhfm7lfc

rhfm7lfc1#

我正试图让这一部分列出每个主机名与这个“命令”。甚至有办法做到这一点或没有?
最简单的方法是将COMMANDS = []放在for循环之前和if块do内

COMMANDS.append("get 'C:\\" + HOSTNAME + ".zip'")

就像HOSTNAME_HOST一样。
或者,您可以使用列表解析:

COMMANDS = ["get 'C:\\" + h + ".zip'" for h in HOSTNAME_HOST]

您甚至可以将整个for循环替换为:

AIDS_TO_EXECUTE, HOSTNAME_HOST, COMMANDS = \
        zip(*[(a, h, "get 'C:\\" + h + ".zip'") for h, a, e in data if e == 'TRUE'])

相关问题