[英]Python list from csv line and write list to file
我是 python 的新手,根本没有任何经验。
我需要将包含单行的文件转换为: abc,def,ghi,jkl
,转换为另一个文件,该文件应具有上一行中的值,如下所示:
abc
def
ghi
jkl
我试过如下但收到错误说TypeError: can only concatenate list (not "str") to list
:
#!/usr/bin/python
inputFile = 'servers'
outputFile = 'cservers'
serverList = []
with open(inputFile) as fi, open(outputFile,'w') as fo:
line = fi.readline()
serverList.append(line.split(','))
for i in serverList:
fo.write(i+'\n')
上面的代码有什么问题?
谢谢
split
返回一个列表,而不是一个字符串。 在serverList.append(..)
行之后,变量serverList
是一个包含字符串列表的列表,看起来像这样:[['abc', 'def', ...]]。
所以 serverList 是一个列表列表,只有一个元素。 然后你遍历 serverList(记住,只有一个元素),这个元素是一个列表。 您尝试将 '\\n' 添加到列表中,这是一个错误: TypeError: can only concatenate list (not "str") to list
。 通常,使用您收到的错误来查看错误:它表示您正在尝试使用列表添加字符串。
要修复它,只需使用
serverList = line.split(',')
然后整个列表返回的split
命令将在 serverList 中的一个元素内
编辑:如评论中所述,这将仅处理一行输入 - 但据我所知,这对您来说没问题(因为您也只阅读了一行)。 如果以后要遍历行,可以使用serverList = serverList + line.split(',')
将两个列表相加
在您的示例中,该行
serverList.append(line.split(','))
导致serverList
看起来像[['abc', 'def', 'ghi', 'jkl']]
。 所以当你来执行
fo.write(i+'\n')
由于控制台输出中给出的原因,您将收到TypeError
抛出。
您可以通过运行来测试它。
a = [['abc', 'def', 'ghi', 'jkl']]
print(a+'\n')
您可以通过更改代码来修复代码,使serverList
是一个字符串列表,表示要写入outputFile
,而不是包含字符串列表的列表。 请参阅下面的示例解决方案。
#!/usr/bin/python
inputFile = 'servers'
outputFile = 'cservers'
with open(inputFile) as fi:
serverList = fi.read().split(',') # Read file contents as list of strings delimited by comma in file
with open(outputFile,'w') as fo:
fo.writelines(s + '\n' for s in serverList) # Write each string in serverList on own line
当您使用 split() 函数时,它会返回一个列表
因此,名为 serverList 的列表现在包含另一个列表。
现在这个代码在这里:
for i in serverList:
fo.write(i+'\n')
意味着您正在遍历 serverList 并记住此列表的每个元素都是另一个列表。
所以这就是错误的原因。 因为在您的代码中:
+'\n'
您正在尝试使用不可能的字符串连接(加入)列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.