我正在尝试读取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文件。
谢谢您的帮助
答案 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.