将列表转换为字符串[重复]
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:
将许多字符串连接在一起的最有效方法是什么?
str
和bytes
对象是不可变的,因此将许多字符串连接在一起是低效的,因为每个连接都会创建一个新对象。在一般情况下,总运行时间成本是总字符串长度的二次方。要积累很多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
【讨论】:
以上是关于将列表转换为字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章