将列表转换为字符串[重复]

Posted

技术标签:

【中文标题】将列表转换为字符串[重复]【英文标题】:Converting a list to a string [duplicate] 【发布时间】:2011-02-23 18:24:37 【问题描述】:

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

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()

【问题讨论】:

发布该代码后,您也应该得到其他错误。例如在buffer.append[term2] ... 您似乎正在将数据添加到每一行的“缓冲区”,然后将整个缓冲区写入文件而不清除它。这将导致第一行的数据对于文件中的每一行都在文件中一次,第二行的数据比那个少一个,依此类推。这可能不是你想要的。 【参考方案1】:
''.join(buffer)

【讨论】:

是的,虽然我猜 OP 可能想要一个空格或逗号作为分隔符。 感谢您的评论。在这种情况下使用' '.join(buffer)','.join(buffer) 对不起,它仍然说缓冲区是 list ,并且 ' '.join(buffer) 期望字符串.. str.join() 本身并不需要一个字符串,它需要一个 list 字符串。您提供给我们的代码,没有语法错误,正是这样做的。也许你应该给我们实际的代码? @PARJAT,@bp,你是在对原始发帖人还是我说? buffer 是一个字符串列表,因此''.join(buffer) 会将它们连接成一个字符串。【参考方案2】:

试试str.join:

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

文档说:

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

【讨论】:

如果您希望将buffer 中的每个项目写入file2 中的单独行,请使用:'\n'.join(buffer) @miku : 这不适用于 python3。 @user2284570 它在 python3 中也可以工作。【参考方案3】:
file2.write(','.join(buffer))

【讨论】:

【参考方案4】:

方法一:

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

方法二:

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

方法三:

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

【讨论】:

您在'' 之后和join 之前缺少一个.【参考方案5】:
file2.write( str(buffer) )

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

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

【讨论】:

【参考方案6】:
buffer=['a','b','c']
obj=str(buffer)
obj[1:len(obj)-1]

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

【讨论】:

【参考方案7】:
# it handy if it used for output list
list = [1, 2, 3]
stringRepr = str(list)
# print(stringRepr)
# '[1, 2, 3]'

【讨论】:

【参考方案8】:

来自the official Python Programming FAQ,适用于 Python 3.6.4:

将许多字符串连接在一起的最有效方法是什么? 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

【讨论】:

以上是关于将列表转换为字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将列表转换为字符串[重复]

将字符列表转换为字符串[重复]

将列表转换为字符串或单词[重复]

Java将字符串转换为枚举列表[重复]

将字符串列表转换为一个字符串[重复]

将列表转换为 SQL 数组插入的字符串 [重复]