форматирование вывода строки с переносами строк и вкладками в Python? - PullRequest
1 голос
/ 06 ноября 2011

Я пытаюсь извлечь некоторые данные из большого пакета файлов и преобразовать их в определенный формат (JSON) для импорта в базу данных с помощью Django Fixtures

Мне удалось продвинуться так далеко:

'{{\ n "pk": 2, \ n "model": trials.conditions, \ n "fields": {\ n "trial_id": NCT00109798, \ n "keyword": мозг и центральная нервная система Опухоли, \ n} {\ n "pk": 3, \ n "model": trials.conditions, \ n "fields": {\ n "trial_id": NCT00109798, \ n "keyword": лимфома, \ n} {\ n "pk": 2, \ n "модель": trials.criteria, \ n "поля": {\ n "trial_id": NCT00109798, \ n "пол": оба, \ n "minimal_age": 18 лет , \ n "Maximum_age": N / A, \ n "healthy_volunteers": Нет, \ n "textblock":, \ n} \ n \ t \ t "pk": 2, \ n \ t \ t "модель" : trials.keyword, \ n \ t \ t "fields": {\ n \ t \ t "trial_id": NCT00109798, \ n \ t \ t "ключевое слово": первичная неходжкинская лимфома центральной нервной системы, \ n \ т \ т} \ п \ т \ т

... много строк спустя .....

После завершения исследуемого лечения пациенты прослеживаются каждые 3 месяца в течение 1 года, каждые \ n 4 месяца в течение 1 года, а затем каждые 6 месяцев в течение 3 лет. \ N \ n ПРОЕКТИРОВАННЫЕ НАЧИСЛЕНИЯ: в общей сложности 6-25 для этого исследования будут начислены пациенты. \ n, \ n "total_status": набор персонала, \ n "фаза": этап 2, \ n "регистрация": 25, \ n "тип исследования": интервенционный, \ n "условие": 2,3, \ n «критерии»: 1, \ n «общий_контакт»: testdata, \ n «местоположение»: 4, \ n «lastchanged_date»: 31 марта 2010 года, \ n «firstreceived_date»: 3 мая 2005 года, \ n "ключевое слово": 2,3, \ n "condition_mesh":, \ n} \ n \ n {\ n "pk": testdata, \ n "model": trials.contact, \ n "fields": { \ n "trial_id": NCT00109798, \ n "last_name": Памела З. Новая, MD, \ n "телефон":, \ n "электронная почта":, \ n}} '

Выходные данные на самом деле должны выглядеть так:

{
    "pk": trial_id,
    "model": trials.trial,
    "fields": {
            "trial_id": trial_id,
            "brief_title": brief_title,
            "official_title": official_title,
            "brief_summary": brief_summary,
            "detailed_Description": detailed_description,
            "overall_status": overall_status,
            "phase": phase,
            "enrollment": enrollment,
            "study_type": study_type,
            "condition": _______________,
            "elligibility": elligibility,
            "criteria": ______________,
            "overall_contact": _______________,
            "location": ___________,
            "lastchanged_date": lastchanged_date,
            "firstreceived_date": firstreceived_date,
            "keyword": __________,
            "condition_mesh": condition_mesh,
    }

    "pk": null,
    "model": trials.locations,
    "fields": {
           "trials_id": trials_id,
           "facility": facility,
           "city": city,
           "state": state,
           "zip": zip,
           "country": country,
    }

Любой совет будет высоко ценится.

Ответы [ 2 ]

3 голосов
/ 09 ноября 2011

Альтернатива параметру отступа json.dumps:

В Python есть симпатичный принтер со значением http://docs.python.org/library/pprint.html. Он чрезвычайно прост в использовании, но печатает только симпатичные объекты Python (вы не можете дать ему jsonстрока и ожидаемый форматированный вывод)

Например.

pydict = {"name":"Chateau des Tours Brouilly","code":"chateau-des-tours-brouilly-2009-1","region":"France > Burgundy > Beaujolais > Brouilly","winery":"Chateau Des Tours","winery_id":"chateau-des-tours","varietal":"Gamay","price":"14.98","vintage":"2009","type":"Red Wine","link":"http://www.snooth.com/wine/chateau-des-tours-brouilly-2009-1/","tags":"colorful, mauve, intense, purple, floral, violet, lively, rich, raspberry, berry","image":"http://ei.isnooth.com/wine/b/7/8/wine_6316762_search.jpeg","snoothrank":3,"available":1,"num_merchants":10,"num_reviews":1}
from pprint import pprint
pprint(pydict)

Вывод

{'available': 1,
 'code': 'chateau-des-tours-brouilly-2009-1',
 'image': 'http://ei.isnooth.com/wine/b/7/8/wine_6316762_search.jpeg',
 'link': 'http://www.snooth.com/wine/chateau-des-tours-brouilly-2009-1/',
 'name': 'Chateau des Tours Brouilly',
 'num_merchants': 10,
 'num_reviews': 1,
 'price': '14.98',
 'region': 'France > Burgundy > Beaujolais > Brouilly',
 'snoothrank': 3,
 'tags': 'colorful, mauve, intense, purple, floral, violet, lively, rich, raspberry, berry',
 'type': 'Red Wine',
 'varietal': 'Gamay',
 'vintage': '2009',
 'winery': 'Chateau Des Tours',
 'winery_id': 'chateau-des-tours'}
1 голос
/ 06 ноября 2011

В модуле json есть симпатичный принтер.Попробуйте что-то вроде этого, print json.dumps(s, indent=4).

>>> s = {'pk': 5678, 'model': 'trial model', 'fields': {'brief_title': 'a short title', 'trial_id':    1234}}

>>> print json.dumps(s, indent=4)
{
    "pk": 5678, 
    "model": "trial model", 
    "fields": {
        "brief_title": "a short title", 
        "trial_id": 1234
    }
}
...