Ответ 1
Попробуйте str.join
:
file2.write(' '.join(buffer))
Документация гласит:
Возвращает строку, которая является конкатенацией строк в итерабельной итерабельной. Разделителем между элементами является строка, предоставляющая этот метод.
Я извлек некоторые данные из файла и хочу записать его во второй файл. Но моя программа возвращает ошибку:
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()
Попробуйте str.join
:
file2.write(' '.join(buffer))
Документация гласит:
Возвращает строку, которая является конкатенацией строк в итерабельной итерабельной. Разделителем между элементами является строка, предоставляющая этот метод.
''.join(buffer)
file2.write( str(buffer) )
Объяснение:
str(anything)
преобразует любой объект python в его строковое представление. Как и результат, вы получаете, если вы делаете print(anything)
, но как строку.
ПРИМЕЧАНИЕ. Это, вероятно, не то, что хочет OP, так как он не контролирует, как элементы buffer
объединяются - он будет помещать ,
между каждым из них, но может быть полезным кому-то другому.
file2.write(','.join(buffer))
Способ 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))
buffer=['a','b','c']
obj=str(buffer)
obj[1:len(obj)-1]
даст "'a', 'b', 'c'" в качестве вывода
# it handy if it used for output list
list = [1, 2, 3]
stringRepr = str(list)
# print(stringRepr)
# '[1, 2, 3]'