Форматирование строки Python и UUID - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь прочитать данные CSV и сопоставить их со следующей XML-структурой.В моей первой попытке я использовал оператор% для форматирования строки, который работает.

import pandas as pd
import uuid
df = pd.read_csv('media.csv', sep=',')
def convert_row(row):
   return """<video>
    <videoType fileUID="%s" name="">
        <locationType></locationType>
        <type>%s</type>
        <format>%s</format>
        <year>%s</year>
    </videoType>
</video>""" % (row[0], row[1], row[2], row[3])


print '\n'.join(df.apply(convert_row, axis=1))

Однако я надеюсь заполнить fileUID="%s" сгенерированным uuid, который я могу затем использовать в другом месте.Я не могу заставить это работать.

Я пытался добавить u = str(uuid.uuid4()) непосредственно перед оператором возврата и обновить % (u, row[0], row[1], row[2], row[3])

Я получаю 'не все аргументы, преобразованные во время форматирования строки'error

Поэтому я попытался использовать форматирование f-строк

import pandas as pd
import uuid
df = pd.read_csv('media.csv', sep=',')
def convert_row(row):
   return f"""<video>
    <videoType fileUID="{u}" name="">
        <locationType></locationType>
        <type>{row[0]}</type>
        <format>{row[1]}</format>
        <year>{row[2]}</year>
    </videoType>
</video>"""


print '\n'.join(df.apply(convert_row, axis=1))

и получил еще одну ошибку с указанием неверного синтаксиса в отношении закрывающего """

Я думаю,Вопрос в том, какой стиль форматирования строк является лучшим вариантом при работе с UUID, и что не так с моим кодом?Кроме того, если я захочу сослаться на сгенерированный uuid в других сгенерированных xml-структурах, я в конечном итоге создам xml-файл с содержимым нескольких сгенерированных xml-структур.

Спасибо за любую помощь

1 Ответ

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

К моменту @ deceze вы пропустили некоторое форматирование в показанном коде.

Я полагаю, что вы ищете что-то вроде этого?

Код

"""UUID Example."""
import pandas as pd
import uuid

df = pd.read_csv('media.csv', sep=',')


def convert_row(row):
    """Convert Row Example."""
    u = str(uuid.uuid4())
    return """<video>
    <videoType fileUID={} name=\"\">
        <locationType></locationType>
        <type>{}</type>
        <format>{}</format>
        <year>{}</year>
    </videoType>
</video>""".format(u, row[0], row[1], row[2], row[3])

print("\n".join(df.apply(convert_row, axis=1)))

Результаты

$ python3 uuid_testing.py 
<video>
    <videoType fileUID=d07ea048-a08f-444c-9182-7fff3a825dcc name="">
        <locationType></locationType>
        <type>2</type>
        <format>b</format>
        <year>f</year>
    </videoType>
</video>
<video>
    <videoType fileUID=4b058e99-457e-4b26-ac03-593c51e6cb1e name="">
        <locationType></locationType>
        <type>3</type>
        <format>c</format>
        <year>g</year>
    </videoType>
</video>
<video>
    <videoType fileUID=8d04f6e6-1b5b-4103-a42a-aaa9c45d7bc5 name="">
        <locationType></locationType>
        <type>4</type>
        <format>d</format>
        <year>h</year>
    </videoType>
</video>

Github: Код был добавлен в мой репо.

...