пятница, 27 сентября 2013 г.

Получить json из файла в кодировке utf-8

Если ваш json файл имеет корректный json и вы по-прежнему получаете ошибку "ValueError: No JSON object could be decoded", то, возможно, проблема в кодировке.

1. Создайте файл my_json.txt:
{
    "banks":
    [
        {
            "name": "Trust Bank",
            "atms": 
            [
                {
                    "longitude": "40.1222",
                    "latitude": "22.1222"
                }
                ,
                {
                    "longitude": "42.1222",
                    "latitude": "33.1222"
                }
            ]
        }
        ,
        {
            "name": "Invest Bank",
            "atms": [
                {
                    "longitude": "40.1222",
                    "latitude": "22.1222"
                }
            ]
        }
    ]
}


2. Переведите файл в кодировку utf-8. Если вы используете notepad++, то сделать это можно через меню "Кодировки" > "Преобразовать в UTF-8".
3. Наша задача - получить данные из этого файла, содержащего данные в формате json. В той же директории создадим файл import_json.py:
#-*- coding:utf-8 -*-

import json

json_file = open('my_json.txt')

# Вот эта строка решает проблему с кодировкой
content = json_file.read().decode("utf-8-sig")

data = json.loads(content)

for key in data:
    banks = data[key]
    for bank in banks:
        print bank['name']


4. Запустим файл import_json.py. Программа выведет:
Trust Bank
Invest Bank

В переменной data у нас будет словарь, содержащий данные из файла. Получение данных из json-файла в кодировке utf-8 прошло успешно, т.к. мы сказали python-у, что файл имеет эту кодировку.

пятница, 20 сентября 2013 г.

Вывести список чисел Фибоначчи и проверить unittest-ом

Задача. Напишите функцию, которая принимает на вход индекс числа в ряде Фибоначчи (0, 1, 1, 2, 3, 5, 8, 13, 21, ... - последующее число равно сумме двух предыдущих), а выводит список чисел этого ряда с 0 до указанного индекса включительно.
Пример:
get_fibonacci_list(0) вернет [0]
get_fibonacci_list(1) вернет [0, 1]
get_fibonacci_list(3) вернет [0, 1, 1, 2]