2017-08-09 20 views
0

私はこのウェブサイト全体を見て、私はgoogleで同じことをしましたが、utf-8をエンコードしたcsvファイルでデータをエクスポートすることについて何も見つかりませんでした。詐欺 - 暗号化csvファイルutf-8

フランス語の文字(Éなど)があるため、ファイルをエンコードする必要があります。 私はCsvItemExporterを使用していますが、通常はすでにutf-8でエンコードされていますが、正しい文字は表示されません。これらの文字の代わりに、私は\ A4ybzkzvのような奇妙なものしか持っていないし、正しいものを持つ方法を知らない。

私は十分にクリアされたことを願っています!私はfile = open('..\\..\\..\\..\\Fnac.csv', 'wb')file = open('..\\..\\..\\..\\Fnac.csv', 'w')を変更するとき、私は、TypeError: must be str, not bytesと:

# -*- coding: utf-8 -*- 
from scrapy import signals 
from scrapy.exporters import CsvItemExporter 

# Define your item pipelines here 
# 
# Don't forget to add your pipeline to the ITEM_PIPELINES setting 
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html 

# Define your output file. 
class FnacPipeline(CsvItemExporter): 
    def __init__(self): 
     self.files = {} 

    @classmethod 
    def from_crawler(cls, crawler): 
     pipeline = cls() 
     crawler.signals.connect(pipeline.spider_opened, signals.spider_opened) 
     crawler.signals.connect(pipeline.spider_closed, signals.spider_closed) 
     return pipeline 

    def spider_opened(self, spider): 
     f = open('..\\..\\..\\..\\Fnac.csv', 'w').close() 
     file = open('..\\..\\..\\..\\Fnac.csv', 'w') 
     self.files[spider] = file 
     self.exporter = CsvItemExporter(file) 
     self.exporter.start_exporting() 

    def spider_closed(self, spider): 
     self.exporter.finish_exporting() 
     file = self.files.pop(spider) 
     file.close() 

    def process_item(self, item, spider): 
     self.exporter.export_item(item) 
     return item 

このパイプラインでは、私はエラーではなく、右の文字を持っている:ここでは

は私pipelines.pyです...あなたの助けをありがとう...

を何より、エラーではなく、右の文字を持たない出力私が持っている: France métropolitaine

私が欲しいの出力: それは書き込みをして、

fd = open(path, mode='w', encoding='utf-8') 
fd.write("Unicode string") 

しかし、あなたのCsvItemExporter縫い目があなたのためにエンコードを行うには:

+2

簡単な質問を、pipelines.pyspider_opened下の機能を変更しましたか? '-o'フラグをつけて' scrap crawl myspider -o results.csv'で結果をエクスポートするか、[これを行うためのいくつかの設定](https://doc.scrapy.org/en/latest/)を設定することもできますtopics/feed-exports.html)。 – Granitosaurus

+0

@Granitosaurusそれは、私はいくつかの設定やカスタマイズが彼がやっている正確なことだと言います。:) – Nabin

+0

私は多くのプロジェクトを持ち、同じプロジェクトに時には多くのスパイダーがあるので、スパイダーでcsvファイルを作成したい...そして、実行ファイルを使ってスパイダーを自動的に実行します。だから、私はスパイダーを実行するたびにexeファイルを書き直したいとは思わない:) –

答えて

2

のPython 3を使用してUTF-8エンコーディングを書き込むためテキストファイルを開くための正しい方法は以下の通りですバイナリデータをファイルに保存します。だから、最良の方法は、バイナリ形式でファイルを開くには、次のとおりです。

fd = open(path, mode='wb') 
fd.write(b"Binary string") 

結果:「フランスMA©のtropolitaine」が正しいです。問題は、ファイルを読むために適切なエディタを使用しないことです。あなたは確かにExcelを使用しています。またExcelでは、デフォルトでフランス語版のcp1252を使用してCSVファイルを開きます。ソースコードを選択するには、ファイルをインポートする必要があります。注:Libre Officeでこの問題は発生しません。

+1

あなたが私に言ったように(エクセルで、データをインポートして...)、私はあなたのファイルを開いたばかりです。あなたは正しいです...私はそれを正しい方法で開けませんでした...ありがとうございました! –

0

正しい答えはutf-8として保存し、そのプロパティを表示するにはexcel Importを使用してください。

一方、直接開くとExcelで表示できますが、デフォルトのエンコーディングはcp12523です。

私にとっては、クライアントにImportというExcelを使用するだけでは意味がありません。したがって、正しく表示されないようにエンコーディングをcp1252に変更することを選択します。

settings.pyの設定を変更すると、FEED_EXPORT_ENCODING = 'utf-8'に設定されても動作しません。私が何をしたか

は、あなたが内蔵scrapy輸出使用していない理由を

self.exporter = CsvItemExporter(file, encoding='cp1252')