写入打开的 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 时跳过标题的主要内容,如果未能解决你的问题,请参考以下文章
将 Spark Streaming 输出写入 HDFS 时跳过数据