我正在尝试匹配两个列表中的元素并将其写入文件,匹配文件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行会有[],如何修复
答案 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]]