所以我有一个程序从.Json创建CSV.
首先我加载json文件.
f = open('Data.json')
data = json.load(f)
f.close()
Run Code Online (Sandbox Code Playgroud)
然后,如果我找到该关键字,我会查找特定的关键字.我将在.csv文件中编写与之相关的所有内容.
for item in data:
if "light" in item:
write_light_csv('light.csv', item)
Run Code Online (Sandbox Code Playgroud)
这是我的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']})
Run Code Online (Sandbox Code Playgroud)
我最初有wb+
模式,但每次打开文件写入时都清除了所有内容.我用它替换了它,a
现在每次写入时,它都会添加一个标题.如何确保标题只写一次?
Igo*_*ist 27
您可以检查文件是否已存在,然后不要调用,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']})
Run Code Online (Sandbox Code Playgroud)
Gil*_*ert 10
您可以检查文件是否为空
import csv
import os
headers = ['head1', 'head2']
for row in interator:
with open('file.csv', 'a') as f:
file_is_empty = os.stat('file.csv').st_size == 0
writer = csv.writer(f, lineterminator='\n')
if file_is_empty:
writer.writerow(headers)
writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)
Dev*_*cie 10
只是另一种方式:
with open(file_path, 'a') as file:
w = csv.DictWriter(file, my_dict.keys())
if file.tell() == 0:
w.writeheader()
w.writerow(my_dict)
Run Code Online (Sandbox Code Playgroud)