2015-10-30 3 views
1

Я не знаю, почему я не могу написать этот document в файл:TypeError: ожидается, объект буфера символов в Python

document=['', 'feeling frisky cool cat hits join us', 'askjoe app add music videos free today saintkittsandnevis', 'give dog flea bath midnight greeeeat smells like dawn', 'cat finds flash drive spent weeks looking', 'downside cat dude means can recognize nice smell pee second', 'louis pine apple make life brighter like star please follow me', 'gonna need nice cup coffee morning', 'gonna need nice cup coffee morning', 'iphone gives warning dies smh'] 

Вот код для записи в файл:

with open("cleaned_tweet.txt", "w") as cleaned_tweet_file: 
    cleaned_tweet_file.write(document) 

Вот ошибка я получаю:

Traceback (most recent call last): 
    File "test.py", line 85, in <module> 
    cleaned_tweet_file.write(document) 
TypeError: expected a character buffer object 

ответ

1

Вот решение, добавьте str:

with open("cleaned_tweet.txt", "w") as cleaned_tweet_file: 
    cleaned_tweet_file.write(str(document)) 
+0

Было несколько комментариев в IRC после того, как я показал им это решение, которое может вызвать дополнительные проблемы. Поэтому, если у вас есть лучшее решение, пожалуйста, предоставьте это, спасибо! –

+0

есть irc здесь? – user391339

3

Метод write() принимает в качестве аргумента str, а не list объект. Это является причиной вашего TypeError и намотав его в str() вызове просто дает строковое представлениеlist объекта documents и не документы в списке такового.

С помощью:

with open("cleaned_tweet.txt", "w") as cleaned_tweet_file: 
    cleaned_tweet_file.write(str(document)) 

Вы получите list объект записывается в виде строки в файле, так что большую строку:

"['', 'feeling frisky cool cat hits join us', 'askjoe app add music videos free today saintkittsandnevis', 'give dog flea bath midnight greeeeat smells like dawn', 'cat finds flash drive spent weeks looking', 'downside cat dude means can recognize nice smell pee second', 'louis pine apple make life brighter like star please follow me', 'gonna need nice cup coffee morning', 'gonna need nice cup coffee morning', 'iphone gives warning dies smh']" 

будет присутствовать. Логически не то, что вам нужно.


Вместо того, чтобы идти через ручной (и, возможно, ошибочное) превращение list в str вы можете использовать либо file.writelines(), который работает с list строк или file.write() в сочетании с for цикла:

С writelines():

with open("cleaned_tweet.txt", "w") as cleaned_tweet_file: 
    cleaned_tweet_file.writelines(document) 

Здесь нет необходимости в цикле или ручном преобразовании.

С write и простой for цикла:

with open("cleaned_tweet.txt", "w") as cleaned_tweet_file: 
    for tweet in document: 
     cleaned_tweet_file.write(tweet) 

Это точно такой же эффект. Главное преимущество заключается в том, что он позволяет вам указывать дополнительный контент на линию; если вам нужно добавить новую строку для твита и префикса, добавьте его явно cleaned_tweet_file.write("Tweet: " + tweet + "\n").

+0

так использует str лучше или цикл for, как показано вами? –

+1

Использование 'write (str (documents))' будет записывать весь список, включая скобки '[]' в файл. Я не думаю, что ты этого хочешь. Я бы предложил «writelines» в этом случае, если вам не нужен каждый элемент в вашем списке 'documents' в новой строке, для которой я бы предложил использовать цикл' for' с командой 'cleaned_tweet_file.write (tweet +" \ n ") '. –

+1

да, имеет смысл :) спасибо за объяснение! –

Смежные вопросы