Python Scrapy Pipeline Редактировать последний элемент? - PullRequest
0 голосов
/ 15 октября 2018

Я использую конвейер в Scrapy, чтобы выводить скрепленные результаты в файл JSON.Конвейер ставит запятую после каждого очищенного элемента, однако я хочу удалить запятую для последнего элемента.Есть ли способ сделать это?

Это конвейер:

class ExamplePipeline(object):
def open_spider(self, spider):
    self.file = open('example.json', 'w')
    self.file.write("[")

def close_spider(self, spider):
    self.file.write("]")
    self.file.close()

def process_item(self, item, spider):
    line = json.dumps(
        dict(item),
        indent = 4,
        sort_keys = True,
        separators = (',', ': ')
    ) + ",\n"
    self.file.write(line)
    return item

И пример вывода выглядит так:

[
{
    "item1": "example",
    "item2": "example"
},
{
    "item1": "example",
    "item2": "example"
},
]

Каков метод python длянайти последний элемент и не отдавать ему запятую?Я думал, что смогу сделать что-то вроде if item[-1] ..., но я не могу заставить это работать.

Есть идеи?

1 Ответ

0 голосов
/ 15 октября 2018

Чтобы применить это к вашему конвейеру, вам придется искать обратно в вашем файле и удалять запятую:

См. Связанный Python - Удалить самый последний символ в файле

class ExamplePipeline(object):

    def close_spider(self, spider):
        # go back 2 characters: \n and ,
        self.file.seek(-2, os.SEEK_END)
        # cut trailing data
        self.file.truncate()
        # save
        self.file.write("]")
        self.file.close()
...