写入文本文件typeerror join

时间:2017-05-19 16:49:22

标签: python

我正在尝试匹配两个列表中的元素并将其写入文件,匹配文件col [0]中的列并将某些列打印到新文件

with open('~/gf_out.txt', 'w') as w:
     w.write('\t'.join(headers) + '\n')
     for i in d1: #list1
         for j in d2: # list2
             if i[0] == j[0]:
                out = ((j[0:10]),i[1],i[2],j[11],j[12])
              # print out
                w.write('\t'.join(out) + '\n')

   TypeError: sequence item 0: expected string, list found

如果更改为

out = (str(j[0:10]),i[1],i[2],j[11],j[12])

最终输出的前10行会有[],如何修复

2 个答案:

答案 0 :(得分:1)

<强>分析

你的问题是正确的,错误消息(当然)告诉了它,以及它所描述的内容......一旦你对Python有足够的理解来解释描述。

out = ((j[0:10]),i[1],i[2],j[11],j[12])
w.write('\t'.join(out) + '\n')

join对一系列字符串进行操作。你给了它一个序列,但是它的第一个元素是元组(j [0:10])。

<强> REMEDY

您有嵌套列表,因此需要嵌套join s。

sep = '\t'    # separator
out_0 = sep.join(j[0:10])
out_line = sep.join(out_0,,i[1],i[2],j[11],j[12])
w.write(out_line)

是的,您可以将其重新组合为单行write;我将其分解以使逻辑清晰。

如果这不符合您的需求,请提供所需的MCVE以澄清问题。

答案 1 :(得分:0)

你究竟想要它做什么? j [0:10]是一个列表,所以如果你想将它转换为字符串,它将有方括号。如果你希望这些元素也可以通过制表符进行连接,你需要明确地将它们连接到另一个列表而不是嵌入它。

out = ('\t'.join(j[0:10]),i[1],i[2],j[11],j[12])

out = j[0:10] + [i[1],i[2],j[11],j[12]]