写入打开的 CSV 时跳过标题

Posted

技术标签:

【中文标题】写入打开的 CSV 时跳过标题【英文标题】:Skip header when writing to an open CSV 【发布时间】:2017-07-28 07:06:59 【问题描述】:

我正在将大量 CSV 编译成一个。第一个 CSV 包含标题,我在写入模式下打开 (maincsv)。然后,我将列出所有其他位于不同文件夹中的列表,并尝试将它们附加到主文件夹中。

它有效,但它只是写在标题上。我只想从第 2 行开始追加。我确信这很简单,但我尝试的所有 next() 等东西都会抛出错误。如果有帮助,请对齐标题和数据。

import os, csv

maincsv = open(r"C:\Data\OSdata\codepo_gb\CodepointUK.csv", 'w', newline='')
maincsvwriter = csv.writer(maincsv)
curdir = os.chdir(r"C:\Data\OSdata\codepo_gb\Data\CSV")
csvlist = os.listdir()
    csvfiles = []
    for file in csvlist:
        path = os.path.abspath(file)
        csvfiles.append(path)

for incsv in csvfiles:
    opencsv = open(incsv)
    csvreader = csv.reader(opencsv)
    for row in csvreader:
        maincsvwriter.writerow(row)

maincsv.close()

【问题讨论】:

如果您不想想要删除现有内容,为什么要以'w' 模式打开它? jonrsharpe 建议您以附加模式“a”打开它。 啊'追加'模式......很明显它很痛!谢谢你。 【参考方案1】:

为了简化事情,我让代码加载运行 python 代码的目录中的所有文件。这将获取第一个 .csv 文件的第一行并将其用作标题。

import os
count=0
collection=open('collection.csv', 'a')
files=[f for f in os.listdir('.') if os.path.isfile(f)]
for f in files:
    if ('.csv' in f):
        solecsv=open(f,'r')
        if count==0:
            # assuming header is 1 line
            header=solecsv.readline()
            collection.write(header)
        for x in solecsv:
            if not (header in x):
                collection.write(x)
collection.close()

【讨论】:

以上是关于写入打开的 CSV 时跳过标题的主要内容,如果未能解决你的问题,请参考以下文章

导入 CSV 时跳过标题或第一行

如何在将 csv 文件加载到配置单元表时跳过页脚/拖车记录

将 Spark Streaming 输出写入 HDFS 时跳过数据

是否可以将 .gzip 文件导入 sqlite / 我可以在导入时跳过某些列吗?

使用 vba 添加新记录时跳过空白字段

IntelliJ IDEA 调试器在调试 Maven 测试时跳过断点