将列表转换为字符串

时间:2010-05-25 15:29:33

标签: python

我从文件中提取了一些数据,并希望将其写入第二个文件。但是我的程序正在返回错误:

sequence item 1: expected string, list found

这似乎正在发生,因为write()想要一个字符串,但它正在接收一个列表。

因此,关于此代码,如何将列表buffer转换为字符串,以便将buffer的内容保存到file2

file = open('file1.txt','r')
file2 = open('file2.txt','w')
buffer = []
rec = file.readlines()
for line in rec :
    field = line.split()
    term1 = field[0]
    buffer.append(term1)
    term2 = field[1]
    buffer.append[term2]
    file2.write(buffer)  # <== error
file.close()
file2.close()

8 个答案:

答案 0 :(得分:72)

尝试str.join

file2.write(' '.join(buffer))

文档说:

  

返回一个字符串,该字符串是可迭代迭代中字符串的串联。元素之间的分隔符是提供此方法的字符串。

答案 1 :(得分:26)

''.join(buffer)

答案 2 :(得分:5)

file2.write( str(buffer) )

说明: str(anything)会将任何python对象转换为其字符串表示形式。类似于您执行print(anything)时获得的输出,但是作为字符串。

注意:这可能不是OP想要的,因为它无法控制buffer的元素如何连接 - 它会在每个元素之间放置, - 但它可能是对别人有用。

答案 3 :(得分:5)

buffer=['a','b','c']
obj=str(buffer)
obj[1:len(obj)-1]

将“'a','b','c'”作为输出

答案 4 :(得分:3)

file2.write(','.join(buffer))

答案 5 :(得分:2)

方法1:

import functools
file2.write(functools.reduce((lambda x,y:x+y), buffer))

方法2:

import functools, operator
file2.write(functools.reduce(operator.add, buffer))

方法3:

file2.write(''.join(buffer))

答案 6 :(得分:1)

# it handy if it used for output list
list = [1, 2, 3]
stringRepr = str(list)
# print(stringRepr)
# '[1, 2, 3]'

答案 7 :(得分:1)

来自{3.6}的the official Python Programming FAQ

  

将多个字符串连接在一起的最有效方法是什么?   strbytes对象是不可变的,因此将多个字符串连接在一起效率低,因为每个连接都会创建一个新对象。在一般情况下,总运行时间成本是总字符串长度的二次方。

     

为了积累许多str对象,推荐的习惯用法是将它们放入列表并在结尾处调用str.join()

chunks = []
for s in my_strings:
    chunks.append(s)
result = ''.join(chunks)
  

(另一个合理有效的习语是使用io.StringIO

     

要累积许多字节对象,推荐的习惯用法是使用就地连接(bytearray运算符)扩展+=对象:

result = bytearray()
for b in my_bytes_objects:
    result += b