如何将列表导出到csv文件的不同列?

问题描述 投票:0回答:2

我试图找出如何将以下列表导出到.csv文件,匹配某些列。

[{'amount': '100', 'unit': 'g.', 'ingredient': 'mælkechokolade'}, {'amount': '20', 'unit': 'g.', 'ingredient': 'mini marshmallows'}, {'amount': '40', 'unit': 'g.', 'ingredient': 'saltede peanuts'}]

以上是解析字符串并使用正则表达式将内容与其正确的标头匹配的结果。

r = re.compile(r"(?P<amount>\d+)\s+(?P<unit>\w+.)\s+(?P<ingredient>.+?(?=<))") print([m.groupdict() for m in r.finditer(s)])

有没有办法使用.writerow正确导出该列表?到目前为止我无法使它工作。

python web-scraping
2个回答
0
投票

您可以使用pandas.to_csv获取数据结构并将其写入csv:

import pandas as pd

somedata = [{'amount': '100', 'unit': 'g.', 'ingredient': 'mælkechokolade'}, {'amount': '20', 'unit': 'g.', 'ingredient': 'mini marshmallows'}, {'amount': '40', 'unit': 'g.', 'ingredient': 'saltede peanuts'}]

df = pd.DataFrame(somedata)

with open("somefile.csv", 'w') as fh:
    df.to_csv(fh)

虽然pandas需要安装pip(pip install pandas)。否则你可以使用内置的csv模块:

import csv

somedata = [{'amount': '100', 'unit': 'g.', 'ingredient': 'mælkechokolade'}, {'amount': '20', 'unit': 'g.', 'ingredient': 'mini marshmallows'}, {'amount': '40', 'unit': 'g.', 'ingredient': 'saltede peanuts'}]

# This will keep order consistent
headers = [k for k in somedata[0].keys())
new_data = [[rec.get(header) for header in headers] for rec in somedata]

with open('somefile.csv', 'w') as fh:
    writer = csv.writer(fh, delimiter=',')
    writer.writerow(headers)
    for row in new_data:
        writer.writerow(row)

这将导致

amount,unit,ingredient
100,g.,mælkechokolade
20,g.,mini marshmallows
40,g.,saltede peanuts

0
投票

您可以使用pandas DataFrame的to_csv函数

import pandas as pd

d = [{'amount': '100', 'unit': 'g.', 'ingredient': 'mælkechokolade'}, {'amount': '20', 'unit': 'g.', 'ingredient': 'mini marshmallows'}, {'amount': '40', 'unit': 'g.', 'ingredient': 'saltede peanuts'}]
pd.DataFrame(d).to_csv('ala.csv')
© www.soinside.com 2019 - 2024. All rights reserved.