Python字符串格式和UUID

时间:2018-09-12 07:54:23

标签: python xml pandas csv uuid

我正在尝试读取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))

但是,我希望用生成的uuid填充fileUID="%s",然后可以在其他地方引用。我无法使它正常工作。

我尝试在return语句之前添加u = str(uuid.uuid4())并更新% (u, row[0], row[1], row[2], row[3])

我收到“不是在格式化字符串时转换了所有参数”错误

所以我尝试使用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时哪种字符串格式样式是最佳选择,我的代码有什么问题?另外,如果我希望在其他生成的xml结构中引用生成的uuid-我最终将创建一个具有多个生成的xml结构内容的xml文件。

谢谢您的帮助

1 个答案:

答案 0 :(得分:1)

在@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: Code was added to my Repo.