Organizar un elemento por columna en una fila de archivo csv en scrapy python
dictionary pipeline (1)
La esencia es que esto es muy simple con 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
Sería mejor unirse a esas matrices en algo, pero dado que los elementos pueden ser una lista o una cadena , es un poco complicado. Decir si algo es una cadena o algún otro iterable es uno de los pocos casos en Python donde la verificación directa del tipo tiene sentido.
>>> 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
Tenía elementos que rasparon de un sitio que los coloqué en archivos json como a continuación
{
"author": ["TIM ROCK"],
"book_name": ["Truk Lagoon, Pohnpei & Kosrae Dive Guide"],
"category": "Travel",
}
{
"author": ["JOY"],
"book_name": ["PARSER"],
"category": "Accomp",
}
Quiero almacenarlos en un archivo csv con un diccionario por fila, en el que un elemento por columna, como se muestra a continuación
| author | book_name | category |
| TIM ROCK | Truk Lagoon ... | Travel |
| JOY | PARSER | Accomp |
obtengo los artículos de un diccionario en una fila pero con todas las columnas combinadas
Mi código de pipeline.py
es
importar 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