【问题标题】:How to read a csv file and create a .yml file dynamically for each entry in csv file如何读取 csv 文件并为 csv 文件中的每个条目动态创建 .yml 文件
【发布时间】:2021-06-18 18:57:41
【问题描述】:

我已经编写了这段代码来创建一个以 UUID 作为名称的 yml 文件。我需要读取 csv 文件并为 .csv 中的每个条目动态创建一个 .yml 文件

import uuid
import yaml

with open('sample.yaml', 'r') as stream:
    d = yaml.load(stream, Loader=yaml.FullLoader)
d['id'] = 'id'
print(d)

d['id']=id
f = open('Test.yaml','w+')
print(d)
yaml.dump(d, f, default_flow_style=False)

【问题讨论】:

  • 你想用d['id'] = 'id'; print(d); d['id']=id 行做什么?
  • 我尝试让我的 yml 文件在每次生成新的 yml 文件时都使用 UUID。或者我可以删除 d['id'] = 'id';打印(d);这部分,只使用另一部分用 UUID 命名 yml 文件。
  • built-in id() 不会产生 UUID,而您使用它的方式是将 id 函数 本身 分配给 d["id"] -也不是 UUID。您需要调用uuid 模块中的uuid[1|3|4|5]() 函数之一 - 我会使用uuid.uuid4()
  • YML 格式是基于 XML 的,看起来与 YAML 格式完全不同。由于您使用过时的 PyYAML 包,您得到的是一个符合 10 多年前 YAML1.1 规范的 YAML 文件。

标签: python csv yaml


【解决方案1】:

如果您想为 csv 中的每一行创建一个文件,您需要做的就是读取 csv 文件并逐行移动。一种方法:

import csv
with open("file_name.csv") as f:
    reader = csv.reader(f)
    for row in reader:
        # open new yaml file
        # write row to file
        # close the file

这是你的想法吗?

您将希望创建唯一的文件名(否则您将继续在每个新行上写入同一个文件)。如果您在每个 row 上使用 str.split(',') 以格式化 yml 文件,您还可以对文件进行更复杂的写入。

【讨论】:

  • 我希望它能够读取具有唯一行的 csv 文件(例如每行不同的战术编号。因此基于它创建一个具有 UUID 的唯一 yml 文件)
  • 所以每一列都是一个唯一的元素,每一行都是一个新条目,每个列/元素中有一个项目?由于每一行的列将具有相同的标签,我认为您可以执行 row.split(',') 来获取该行中的项目列表。然后只需索引该列表即可,因为您想将内容放在 yml 文件中的任何位置
猜你喜欢
  • 2016-06-14
  • 2021-09-13
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
相关资源
最近更新 更多