запись в файл с использованием конвейера Scrapy - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь файл, используя scrapy pipelines.py, item правильно анализируется и отображается в терминале при запуске.это мой pipleines.py

import datetime,csv

class AmazonfullPipeline(object):
    keys = ["Product_Name","Price","Amazon_Stock","rating","ASIN","Rank1","Rank1_category","Rank2","Rank2_category",
    "UPC","Item_Model_Number"]

    def __init__(self):
        now = datetime.datetime.now()
        current_date = now.strftime("%d%b")
        file_name = "TestFile"
        infile = open("{}_{}.csv".format(current_date,file_name),"w").close()
        dict_writer = csv.DictWriter(infile, self.keys)
        dict_writer.writeheader()
    def process_item(self, item, spider):
        self.dict_writer.writerow(item)

Сообщение об ошибке:

dict_writer = csv.DictWriter(infile, self.keys)
  File "/usr/lib/python3.6/csv.py", line 140, in __init__
    self.writer = writer(f, dialect, *args, **kwds)
TypeError: argument 1 must have a "write" method

1 Ответ

2 голосов
/ 13 июня 2019

У вас есть несколько проблем:

  1. Вы закрываете файловый дескриптор перед использованием;
  2. Вы не установили переменную класса.Используйте self.dict_writer, а не dict_writer в __init__.

Контрольный код:

import datetime,csv

class AmazonfullPipeline(object):
    keys = ["Product_Name","Price","Amazon_Stock","rating","ASIN","Rank1","Rank1_category","Rank2","Rank2_category",
    "UPC","Item_Model_Number"]

    def __init__(self):
        now = datetime.datetime.now()
        current_date = now.strftime("%d%b")
        file_name = "TestFile"
        infile = open("{}_{}.csv".format(current_date,file_name),"w")  # <- remove close() here
        self.dict_writer = csv.DictWriter(infile, self.keys)  # <- add self. here
        self.dict_writer.writeheader()  # <- add self. here

    def process_item(self, item, spider):
        self.dict_writer.writerow(item)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...