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
)
我正在尝试将 .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
)