Выбор таблицы ETL по переменной - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь выбрать строки в таблице и создать новую таблицу с информацией из исходной таблицы, используя PETL.

Мой код сейчас:

import petl as etl


table_all = (
    etl.fromcsv("practice_locations.csv")
        .convert('Practice_Name', 'upper')
        .convert('Suburb', str)
        .convert('State', str)
        .convert('Postcode', int)
        .convert('Lat', str)
        .convert('Long', str)
)


def selection(post_code):
    table_selected = etl.select(table_all, "{Postcode} == 'post_code'")
    print(post_code)
    etl.tojson(table_selected, 'location.json', sort_keys=True)

Но я не могу заполнить table_selected, используя функцию выбора как есть.Вызов etl.select будет работать, если я заменим post_code на

table_selected = etl.select(table_all, "{Postcode} == 4510")

, который выведет правильную таблицу, показанную в виде:

    +--------------------------------+--------------+-------+----------+--------------+--------------+
    | Practice_Name                  | Suburb       | State | Postcode | Lat          | Long         |
    +================================+==============+=======+==========+==============+==============+
    | 'CABOOLTURE COMBINED PRACTICE' | 'Caboolture' | 'QLD' |     4510 | '-27.085007' | '152.951707' |
    +--------------------------------+--------------+-------+----------+--------------+--------------+

I 'Я уверен, что я просто пытаюсь позвонить post_code неправильно, но попробовал все из документации PETL и не могу понять это.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 20 сентября 2018

"{Postcode} == 'post_code'" не заменит post_code значением, переданным вашей функции selection.

Вам необходимо отформатировать строку выбора (и экранировать {Postcode} при использовании format)

table_selected = etl.select(table_all, "{{Postcode}} == {post_code}".format(post_code=post_code))

Тестирование в консоли

>>> "{{Postcode}} == {post_code}".format(post_code=1234)
'{Postcode} == 1234'
...