拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何在不替换第一行的情况下向现有CSV档案添加标题?

如何在不替换第一行的情况下向现有CSV档案添加标题?

白鹭 - 2022-01-23 2091 0 0

我想要做的实际上就像标题中所写的那样。

with open(path, "r ", newline='') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    list_of_column_names = []
    num_cols = len(next(csv_reader))
    for i in range(num_cols):
        list_of_column_names.append(i)
    fields = list_of_column_names
    with open(example.csv, "r ", newline='') as writeFile:
        csvwriter = csv.DictWriter(writeFile, delimiter=',', lineterminator='\n', fieldnames=fields)
        writeFile.seek(0, 0)
        csvwriter.writeheader()

我想列举最初没有任何列名的列。但是当我运行代码时,它替换了第一行中的资料。例如:

示例.csv:

a,b
c,d
e,f

我想要的是:

0,1
a,b
c,d
e,f

运行代码后会发生什么:

0,1
c,d
e,f

有没有办法防止这种情况发生?

uj5u.com热心网友回复:

没有什么神奇的方法可以将一行插入到现有的文本档案中。

以下是我的想法,您的代码已经进行了第 2-4 步。另外,我不会与DictWriter 混为一谈,因为您没有尝试将 Python dict 转换为 CSV(我可以看到您使用它来撰写标题,但这对于常规读取器/写入器来说很容易):

  1. 打开一个新档案进行写入
  2. 读取 CSV 的第一行
  3. 将列索引解释为标题
  4. 写标题
  5. 写第一行
  6. 读/写其余的行
  7. 将新档案移回旧档案,覆写(未显示)

这是代码中的样子:

import csv

with open('output.csv', 'w', newline='') as out_f:
    writer = csv.writer(out_f)

    with open('input.csv', newline='') as in_f:
        reader = csv.reader(in_f)

        # Read the first row
        first_row = next(reader)
        # Count the columns in first row; equivalent to your `for i in range(len(first_row)): ...`
        header = [i for i, _ in enumerate(first_row)]

        # Write header and first row
        writer.writerow(header)
        writer.writerow(first_row)

        # Write rest of rows
        for row in reader:
            writer.writerow(row)
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *