小编典典

python csv,仅一次写入标头

python

因此,我有一个从.Json创建CSV的程序。

首先,我加载json文件。

f = open('Data.json')
data = json.load(f)
f.close()

然后,如果找到了特定的关键字,便会通过它查找特定的关键字。我将与此相关的所有内容都写入.csv文件中。

for item in data:
    if "light" in item:
       write_light_csv('light.csv', item)

这是我的write_light_csv功能:

def write_light_csv(filename,dic):

    with open (filename,'a') as csvfile:
        headers = ['TimeStamp', 'light','Proximity']
        writer = csv.DictWriter(csvfile, delimiter=',', lineterminator='\n',fieldnames=headers)

        writer.writeheader()

        writer.writerow({'TimeStamp': dic['ts'], 'light' : dic['light'],'Proximity' : dic['prox']})

我最初使用的wb+是该模式,但是每次打开文件进行写入时,它都会清除所有内容。我将其替换为a,现在每次编写时都会添加一个标题。如何确保标头仅写入一次?


阅读 214

收藏
2020-12-20

共1个答案

小编典典

您可以检查文件是否已经存在,然后不调用,writeheader()因为您使用附加选项打开文件。

像这样:

import os.path


file_exists = os.path.isfile(filename)

with open (filename, 'a') as csvfile:
    headers = ['TimeStamp', 'light', 'Proximity']
    writer = csv.DictWriter(csvfile, delimiter=',', lineterminator='\n',fieldnames=headers)

    if not file_exists:
        writer.writeheader()  # file doesn't exist yet, write a header

    writer.writerow({'TimeStamp': dic['ts'], 'light': dic['light'], 'Proximity': dic['prox']})
2020-12-20