gpt4 book ai didi

python - 简单的 CSV 到 XML 转换 - Python

转载 作者:太空狗 更新时间:2023-10-29 21:30:46 25 4
gpt4 key购买 nike

我正在寻找一种将 CSV 自动转换为 XML 的方法。

这是一个包含电影列表的 CSV 文件示例:

Movies Csv

这是 XML 格式的文件:

<collection shelf="New Arrivals">
<movietitle="Enemy Behind">
<type>War, Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>10</stars>
<description>Talk about a US-Japan war</description>
</movie>
<movietitle="Transformers">
<type>Anime, Science Fiction</type>
<format>DVD</format>
<year>1989</year>
<rating>R</rating>
<stars>8</stars>
<description>A schientific fiction</description>
</movie>
<movietitle="Trigun">
<type>Anime, Action</type>
<format>DVD</format>
<episodes>4</episodes>
<rating>PG</rating>
<stars>10</stars>
<description>Vash the Stampede!</description>
</movie>
<movietitle="Ishtar">
<type>Comedy</type>
<format>VHS</format>
<rating>PG</rating>
<stars>2</stars>
<description>Viewable boredom</description>
</movie>
</collection>

我已经尝试了几个示例,在这些示例中,我能够使用 Python 使用 DOM 和 SAX 读取 csv 和 XML 格式,但我还没有找到一个简单的转换示例。到目前为止,我有:

import csv              
f = open('movies2.csv')
csv_f = csv.reader(f)

def convert_row(row):
return """<movietitle="%s">
<type>%s</type>
<format>%s</format>
<year>%s</year>
<rating>%s</rating>
<stars>%s</stars>
<description>%s</description>
</movie>""" % (
row.Title, row.Type, row.Format, row.Year, row.Rating, row.Stars, row.Description)

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

但是我得到了错误:

 File "moviesxml.py", line 16, in module
print ('\n'.join(csv_f.apply(convert_row, axis=1)))
AttributeError: '_csv.reader' object has no attribute 'apply'

我是 Python 的新手,所以非常感谢任何帮助!

我正在使用 Python 3.5.2。

谢谢!

丽莎

最佳答案

一种可能的解决方案是首先将 csv 加载到 Pandas 中,然后将其逐行转换为 XML,如下所示:

import pandas as pd
df = pd.read_csv('untitled.txt', sep='|')

示例数据(假设有分隔符等)加载为:

          Title                   Type Format  Year Rating  Stars  \
0 Enemy Behind War,Thriller DVD 2003 PG 10
1 Transformers Anime,Science Fiction DVD 1989 R 9

Description
0 Talk about...
1 A Schientific fiction

然后使用自定义函数转换为 xml:

def convert_row(row):
return """<movietitle="%s">
<type>%s</type>
<format>%s</format>
<year>%s</year>
<rating>%s</rating>
<stars>%s</stars>
<description>%s</description>
</movie>""" % (
row.Title, row.Type, row.Format, row.Year, row.Rating, row.Stars, row.Description)

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

这样你就可以得到一个包含 xml 的字符串:

<movietitle="Enemy Behind">
<type>War,Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>10</stars>
<description>Talk about...</description>
</movie>
<movietitle="Transformers">
<type>Anime,Science Fiction</type>
<format>DVD</format>
<year>1989</year>
<rating>R</rating>
<stars>9</stars>
<description>A Schientific fiction</description>
</movie>

您可以将其转储到文件或其他任何内容中。

灵感来自 this great answer.


编辑:使用您发布的加载方法(或实际将数据加载到变量的版本):

import csv              
f = open('movies2.csv')
csv_f = csv.reader(f)
data = []

for row in csv_f:
data.append(row)
f.close()

print data[1:]

我们得到:

[['Enemy Behind', 'War', 'Thriller', 'DVD', '2003', 'PG', '10', 'Talk about...'], ['Transformers', 'Anime', 'Science Fiction', 'DVD', '1989', 'R', '9', 'A Schientific fiction']]

我们可以通过稍作修改转换为 XML:

def convert_row(row):
return """<movietitle="%s">
<type>%s</type>
<format>%s</format>
<year>%s</year>
<rating>%s</rating>
<stars>%s</stars>
<description>%s</description>
</movie>""" % (row[0], row[1], row[2], row[3], row[4], row[5], row[6])

print '\n'.join([convert_row(row) for row in data[1:]])

得到相同的结果:

<movietitle="Enemy Behind">
<type>War</type>
<format>Thriller</format>
<year>DVD</year>
<rating>2003</rating>
<stars>PG</stars>
<description>10</description>
</movie>
<movietitle="Transformers">
<type>Anime</type>
<format>Science Fiction</format>
<year>DVD</year>
<rating>1989</rating>
<stars>R</stars>
<description>9</description>
</movie>

关于python - 简单的 CSV 到 XML 转换 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41059264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com