Python将奇怪的Unicode写入CSV

时间:2016-09-10 04:31:40

标签: python csv unicode

我正在尝试使用python newspaper3k包提取文章信息,然后写入CSV文件。正确下载信息时,我遇到输出到CSV的问题。尽管我努力阅读它,但我认为我并不完全理解unicode。

{% load i18n pybb_tags %}

<div class='category'>
    {% if category %}
    <h3>{{ category }}</h3>
    {% include 'pybb/forumindex_list.html' with forum_list=category.forums_accessed category=category parent_forum='' %}
    {% else %}
    <h3>{{ forum.category }}</h3>
    {% include 'pybb/forumindex_list.html' with forum_list= %}{{ forum.category|forumindexlistbycategory }}
    {% endif %}
</div>

当我打印collat​​e ['content'],即first_article.text时,控制台输出文章的内容就好了。一切都正确显示,撇号和所有。当我写入CVS时,内容单元格文本中包含奇数字符。例如:

“在一天结束时,欧洲的经济形势并不好,通货膨胀看起来并不令人兴奋,而且还有许多政治风险需要考虑。

到目前为止,我已经尝试过:

from newspaper import Article, Source
import csv

first_article = Article(url="http://www.bloomberg.com/news/articles/2016-09-07/asian-stock-futures-deviate-as-s-p-500-ends-flat-crude-tops-46")

first_article.download()
if first_article.is_downloaded:
    first_article.parse()
    first_article.nlp

article_array = []
collate = {}

collate['title'] = first_article.title
collate['content'] = first_article.text
collate['keywords'] = first_article.keywords
collate['url'] = first_article.url
collate['summary'] = first_article.summary
print(collate['content'])
article_array.append(collate)

keys = article_array[0].keys()
with open('bloombergtest.csv', 'w') as output_file:
    csv_writer = csv.DictWriter(output_file, keys)
    csv_writer.writeheader()
    csv_writer.writerows(article_array)

output_file.close()

无济于事。我也试过utf-16而不是8,但这只是导致单元格以奇数顺序写入。虽然输出看起来正确,但它没有在CSV中正确创建单元格。我也试过.encode('utf-8')是各种变量,但没有任何效果。

发生了什么事?为什么控制台会正确打印文本,而CSV文件有奇怪的字符?我怎样才能解决这个问题?

3 个答案:

答案 0 :(得分:5)

根据Leon和Mark Tolonen的建议,将with open('bloombergtest.csv', 'w', encoding='utf-8') as output_file:更改为with open('bloombergtest.csv', 'w', encoding='utf-8-sig') as output_file:

答案 1 :(得分:4)

这可能是您用来打开或打印CSV文件的软件的一个问题 - 它并没有理解&#34; CSV以UTF-8编码,并采用ASCII,latin-1,ISO-8859-1或类似的编码。

您可以帮助该软件识别文件开头placing a BOM sequence的CSV文件编码(通常不推荐用于UTF-8)。

答案 2 :(得分:4)

使用编码utf-8-sig。 Excel要求BOM解释UTF8;否则,它采用默认的本地化编码。