CSV 文件转储到 python 中的 yaml 文件

CSV file dump to yaml file in python

我正在尝试将 .csv 文件转储到 .yml 文件中并已成功。 唯一的问题是 .yml 文件中的语法不是我想要的。

我的 .csv 文件:

NAME,KEYWORDS
Adam,Football Hockey

我在哪里读取 .csv 文件并将其转储到 .yml 文件中:

import csv
import pandas
import yaml

""" Reading whole csv file with panda library """
df = pandas.read_csv('keywords.csv')


""" Dump DataFrame into getData.yml as yaml code """
with open('getData.yml', 'w') as outfile:
    yaml.dump(
        df.to_dict(orient='records'),
        outfile,
        sort_keys=False,
        width=72, 
        indent=4
    )

.yml 输出的外观:

-   NAME: Adam
    KEYWORDS: Football Hockey

我希望它看起来如何:

-   NAME: Adam
    KEYWORDS: Football, Hockey

我想在 Football 和 Hockey 之间加一个逗号。但如果我把它放在 .csv 文件中,它看起来会很奇怪,因为所有内容都从一开始就用逗号分隔。我该怎么做?

我用以下方法复制了你的数据框:

df = pd.read_csv(io.StringIO(
"""
NAME,KEYWORDS
Adam,Football Hockey
"""
), sep=",")

我假设可以有多个关键字,每个关键字用 space 分隔。要插入逗号,您可以使用 pandas 提供的 apply() 方法。

df.KEYWORDS = df.KEYWORDS.apply(lambda k: k.replace(" ", ", "))

然后 运行 其余代码以产生所需的结果。

你有 2 个选择:

在 CSV 文件中,如果逗号在引号内,则在解析过程中不会将其视为分隔符。这样,您的 CSV 文件将如下所示:

NAME,KEYWORDS
Adam,"Football, Hockey"

或者,您可以在阅读后处理 KEYWORDS 列。这会将以下内容添加到您的代码中:

df = pandas.read_csv('keywords.csv')
df["KEYWORDS"] = df["KEYWORDS"].apply(lambda x: ", ".join(x.split()))

接受的答案非常好。任务似乎是将 csv 文件转换为 yaml。如果是这样的话,pandas 库并不是真正必要的,因为内置的 csv 模块可以读取 csv 文件。

import csv
import yaml

with open('keywords.csv') as f:
    reader = csv.reader(f)
    next(reader) # skip header
    name_keywords = [ {'NAME': n, 'KEYWORDS': ', '.join(k.split())}
                      for n, k in reader ]

""" Dump DataFrame into getData.yml as yaml code """
with open('getData.yml', 'w') as outfile:
    yaml.dump(
        name_keywords,
        outfile,
        sort_keys=False,
        width=72, 
        indent=4
    )