【问题标题】:Python: TypeError: can only concatenate str (not "list") to strPython:TypeError:只能将str(不是“list”)连接到str
【发布时间】:2021-03-25 15:10:43
【问题描述】:

我在这里做了一些研究,但无法找到我正在寻找的确切答案。所以我想我会寻求一些支持。我一直在研究一个 python 脚本,它将搜索 CSV 并检查最后一列是否为 'TRUE',如果是,则它检索 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

【问题讨论】:

  • 错误很明显:HOSTNAME_HOST 不是字符串,而是list。而且我们不能将列表连接到字符串。

标签: api csv typeerror script


【解决方案1】:

我正试图让这部分用这个“命令”列出每个主机名。有没有办法做到这一点?

最简单的方法是将COMMANDS = [] 放在for 循环之前和if 块内

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

就像你对HOSTNAME_HOST所做的那样。

或者,您可以使用list comprehension

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'])

【讨论】:

  • 那行得通。感谢您的帮助!如此简单的修复...感谢您提供不同的方法和解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2021-11-07
  • 2020-09-18
  • 2020-08-19
  • 1970-01-01
相关资源
最近更新 更多