Уведомления

Группа в Telegram: @pythonsu

#1 Март 27, 2017 23:33:07

exded
Зарегистрирован: 2017-03-27
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг данных в csv.

Парсю данные:

 bb_strings = re.findall(r'var model = ({.*})', ad)
bp = {}
if bb_strings:
    bp = json.loads(bb_strings[0])
    t = bp.get('AVAILABLE_SIZES')
    footlocker.append(('razmer', t))
    print(footlocker)

Вывод данных


В csv файле у меня


Как мне сделать так что бы получилось как на картинке?

Офлайн

#2 Март 28, 2017 02:08:00

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Парсинг данных в csv.

exded
В csv файле у меня
Хотя здесь и вправду значения разделенные запятыми, вряд ли это можно назвать валидным csv-файлом (т.е. что обычно подразумевают под csv).

CSV обычно таков:

 one, two, three, four
'data11", "data12", "data13", "data14"
'data21", "data22", "data23", "data24"
etc.

и для загрузки данных из таких файлов удобно использовать Pandas.

Но поскольку это явно результат парсинга какой-то web-страницы, а еще к тому же активно использующей ES(JS), то можно попытаться все же обнаружить (если таковые динамически пересылаются) там где-либо данные похожие на json, тогда можно использовать модуль json.

Ну и если другого не остается, то re….

 # Пусть у нас такой текст
import re
text = """ ['1'] ['1','32', '45']"""
mypat = re.compile(r'''\[(['\d',\s\.]+)\]''')
list(map(lambda x: x.strip().replace("'",'').split(","), mypat.findall(text)))

в результате получим списки, элементы которых значения размеров в виде строк.









Отредактировано scidam (Март 28, 2017 02:08:34)

Офлайн

#3 Март 28, 2017 08:55:12

exded
Зарегистрирован: 2017-03-27
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг данных в csv.

scidam
у меня и так получается json

 bb_strings = re.findall(r'var model = ({.*})', ad)
print(bb_strings)

 ['{"ALLSKUS":["5447A"],"NBR":"224559","PRICERANGE":"$143.99","GENDER_AGE":"Men\'s","PRICEADJUSTDATE":"","AVAILABLE_SIZES":[" 09.0"],"DISCOUNT_PERCENT":"15","isFieldTestable":false,"SORT":"1318","HASCUSTOMPRODUCTTEMPLATE":false,"PR_LIST":"169.99","SPORTS":[{"ID":"39","NM":"Casual"}],"SIZECHART_CD":"S0629","HASSIZES":true,"PR_SALE":"143.99","LOCALIZATION":{},"MODELTEMPLATE":{"ISMODELTEMPLATEACTIVE":"N","MODELTEMPLATE_IMAGE":""},"ISCUSTOMPRODUCT":false,"INTRODUCTIONDATE":"","SKU":"5447A","ISINTANGIBLE":false,"PROD_TP":"Shoes","CUSTPROD_CD":"","NM":"Timberland Britton Hill Chukka - Men\'s","REVIEWS":{"HASREVIEWS":true,"TOTALREVIEWCOUNT":"3","WEIGHTEDAVERAGERATING":"4.33","WEIGHTEDAVERAGERECOMMENDED":"3"},"BRAND":"Timberland","INET_COPY":"<p>Showcase your style and stay comfortable with the Timberland Britton Hill Chukka boot.<\\/p> <ul> <li>Premium smooth and printed full grain leather upper from an LWG Silver-rated tannery provides durability.<\\/li> <li>100% organic cotton laces.<\\/li> <li>Removable anti-fatigue footbed features soft leather from an LWG Silver-rated tannery and 100% recycled PET herringbone lining for comfort.<\\/li> <li>EVA midsole for all-day comfort, lightweight cushioning and shock absorption.<\\/li> <li>Rugged Green Rubber&trade; (42% recycled rubber) outsole for durability.<\\/li> <li>SensorFlex technology delivers underfoot support, independent suspension, and greater flexibility for the ultimate smooth ride over any terrain.<\\/li> <\\/ul>"}']

Если я так пишу:
 bb_strings = re.findall(r'var model = ({.*})', ad)
bp = {}
if bb_strings:
    bp = json.loads(bb_strings[0])
    for bl in bp['AVAILABLE_SIZES']:
    footlocker.append(('размер', bl))

то на выходе я получаю такой файл:





Но мне нужно что бы на выходе было:





ps. я использую pandas

Отредактировано exded (Март 28, 2017 08:55:45)

Офлайн

#4 Март 29, 2017 05:43:25

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Парсинг данных в csv.

Если я правильно все понял, то вопрос в том, как сделать пустые ячейки. Пустые ячейки получаются, если сохранять DataFrame c null-данными в ячейках…

 >>> main_data = pd.DataFrame(pd.np.array([[1,2,3],['bob', 'john', 'taylor'], [1.2,3,4]]).T, columns=['price','name', 'amount'])
>>> tojoin = [[1], [2,3,4,5], [2,3]] # Это список размеров для соответствующих строк данных
>>> maxsize=max(map(lambda x: len(x), tojoin))
>>> prepared = list(map(lambda x: x + [pd.np.nan]*(maxsize-len(x)), tojoin)) # Дополним список пустыми значениями
>>> tojoindf = pd.DataFrame(prepared, columns=len(prepared[0])*['Размер']) # Создадим новый DF..
>>> main_data.join(tojoindf) # Присоединим данные размеров к основным данным
  price    name amount  Размер  Размер  Размер  Размер
0     1     bob    1.2       1     NaN     NaN     NaN
1     2    john      3       2     3.0     4.0     5.0
2     3  taylor      4       2     3.0     NaN     NaN
>>> main_data.join(tojoindf).to_csv('output.csv') # сохраним в csv файл output.csv

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version