Python Scrapy Pipeline Редактировать последний элемент?
Я использую конвейер в 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 ответ
Решение
Чтобы применить это к вашему конвейеру, вам придется искать обратно в своем файле и удалять запятую:
См. Связанный 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()