繁体   English   中英

来自csv行的Python列表并将列表写入文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM