类型错误:期望 Python 中的字符缓冲区对象

Mon*_*lal 2 python buffer file typeerror

我不知道为什么我不能将其写入document文件:

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']
Run Code Online (Sandbox Code Playgroud)

这是写入文件的代码:

with open("cleaned_tweet.txt", "w") as cleaned_tweet_file:
    cleaned_tweet_file.write(document)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

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

Jim*_*ard 5

该方法write()将参数 astr而不是list对象作为参数。这是你的原因,将TypeError它包装在一个str()调用中只会为你提供 list对象的字符串表示,documents不是列表中的文档本身。

通过使用:

with open("cleaned_tweet.txt", "w") as cleaned_tweet_file:
    cleaned_tweet_file.write(str(document))
Run Code Online (Sandbox Code Playgroud)

您会将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']"
Run Code Online (Sandbox Code Playgroud)

将在场。逻辑上不是你所追求的。


您可以使用which 与 a of 字符串一起使用,或与循环结合使用,而不是通过手动(可能是错误的)转换为listto :strfile.writelines()listfile.write()for

writelines()

with open("cleaned_tweet.txt", "w") as cleaned_tweet_file:
    cleaned_tweet_file.writelines(document)
Run Code Online (Sandbox Code Playgroud)

这里不需要循环或手动转换。

随着write和一个简单的for循环:

with open("cleaned_tweet.txt", "w") as cleaned_tweet_file:
    for tweet in document:
        cleaned_tweet_file.write(tweet)
Run Code Online (Sandbox Code Playgroud)

这具有完全相同的效果。它的主要优点是它允许您指定每行的附加内容;如果您需要为每条推文添加换行符和前缀,请明确添加cleaned_tweet_file.write("Tweet: " + tweet + "\n")