我从网站上抓取了一些物品,并将其放入如下所示的json文件中

{
 "author": ["TIM ROCK"],
 "book_name": ["Truk Lagoon, Pohnpei & Kosrae Dive Guide"],
 "category": "Travel",
}
{
 "author": ["JOY"],
 "book_name": ["PARSER"],
 "category": "Accomp",
}


我想将它们存储在csv文件中,每行一本字典,其中每一列如下一项

|    author   |     book_name     |    category   |
|   TIM ROCK  |  Truk Lagoon ...  |     Travel    |
|     JOY     |   PARSER          |     Accomp    |


我在一排中得到一本词典的项,但所有列都合并了

我的pipeline.py代码是

导入csv

class Blurb2Pipeline(object):

    def __init__(self):
        self.brandCategoryCsv = csv.writer(open('blurb.csv', 'wb'))
        self.brandCategoryCsv.writerow(['book_name', 'author','category'])

    def process_item(self, item, spider):
        self.brandCategoryCsv.writerow([item['book_name'].encode('utf-8'),
                                    item['author'].encode('utf-8'),
                                    item['category'].encode('utf-8'),
                                     ])
        return item

最佳答案

要点是,使用csv.DictWriter非常简单:

>>> inputs = [{
...  "author": ["TIM ROCK"],
...  "book_name": ["Truk Lagoon, Pohnpei & Kosrae Dive Guide"],
...  "category": "Travel",
... },
... {
...  "author": ["JOY"],
...  "book_name": ["PARSER"],
...  "category": "Accomp",
... }
... ]
>>>
>>> from csv import DictWriter
>>> from cStringIO import StringIO
>>>
>>> buf=StringIO()
>>> c=DictWriter(buf, fieldnames=['author', 'book_name', 'category'])
>>> c.writeheader()
>>> c.writerows(inputs)
>>> print buf.getvalue()
author,book_name,category
['TIM ROCK'],"['Truk Lagoon, Pohnpei & Kosrae Dive Guide']",Travel
['JOY'],['PARSER'],Accomp


最好将这些数组连接到某个东西上,但是由于元素可以是列表或字符串,所以有点棘手。在Python中为数不多的情况下,直接类型检查很有意义,这是其中之一。

>>> for row in inputs:
...     for k, v in row.iteritems():
...         if not isinstance(v, basestring):
...             try:
...                 row[k] = ', '.join(v)
...             except TypeError:
...                 pass
...     c.writerow(row)
...
>>> print buf.getvalue()
author,book_name,category
TIM ROCK,"Truk Lagoon, Pohnpei & Kosrae Dive Guide",Travel
JOY,PARSER,Accomp

关于python - 在scrapy python中,一行csv文件中的每一列安排一项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10816241/

10-12 12:38
查看更多