2016-09-10 7 views
0

python newspaper3kパッケージを使用して記事情報を抽出しようとしていて、CSVファイルに書き込もうとしています。情報が正しくダウンロードされている間、私はCSVへの出力に問題があります。私はそれについての私の読書努力にもかかわらず、私が完全にユニコードを理解するとは思わない。Python奇妙なUnicodeをCSVに書き込む

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() 

私はコレート['content'](first_article.text)を印刷すると、コンソールは記事の内容をうまく出力します。すべてが正しく表示され、アポストロフィとすべて。 CVSに書き込むと、コンテンツセルのテキストには奇数の文字が含まれます。たとえば、

「ヨーロッパの経済は素晴らしい形ではありません。インフレはエキサイティングに見えます。また、政治的リスクがたくさんあります。

は、これまで私が試してみました:

with open('bloombergtest.csv', 'w', encoding='utf-8') as output_file: 

無駄に。私も8の代わりにutf-16を試しましたが、ちょうど奇妙な順序でセルを書きました。出力が正しく見えましたが、CSVでセルが正しく作成されませんでした。私も試みました。エンコード( 'utf-8')はさまざまな変数ですが、何も機能していません。

何が起こっているのですか? CSVファイルに奇妙な文字があるのに、コンソールがテキストを正しく印刷するのはなぜですか?これをどうすれば解決できますか?

答えて

2

これは、CSVファイルを開いたり印刷したりするために使用するソフトウェアに問題があります.CSVがUTF-8でエンコードされていて、ASCII、latin-1、ISO-8859- 1またはそれと同様のエンコーディングを使用します。

ファイルの先頭にあるCSVファイルのエンコードをplacing a BOM sequence(通常はUTF-8には推奨されません)で認識するのに役立ちます。

+1

私はそれをExcelで開いています。普遍的な文字を書く方法はありませんか? – sirryankennedy

+0

@ sirryankennedy BOM付きのUTF-8を作成しようとしましたか(リンクされた答えに示されています)? – Leon

+0

@ sirryankennedy:「ユニバーサル」エンコーディングはありません。プレーンなASCIIでさえも "普遍的な"ものではない。 1バイトエンコーディングを使用する場合は、Windows-1252などの中かっこを含むものに変換します。 – usr2564301

2

エンコードutf-8-sigを使用してください。 ExcelはBOMにUTF8を解釈させる必要があります。それ以外の場合は、デフォルトのローカライズされたエンコーディングとみなされます。

+0

これはトリックでした。 – sirryankennedy

+0

これも私にとってそれでした! <3 –

1

with open('bloombergtest.csv', 'w', encoding='utf-8') as output_file:からwith open('bloombergtest.csv', 'w', encoding='utf-8-sig') as output_file:に変更すると、LeonとMark Tolonenの推奨どおりに動作します。

関連する問題