如何只在值不为空的情况下写入行

  • 本文关键字:情况下 python
  • 更新时间 :
  • 英文 :


我正在将我向其发出api请求的json数据转换为CSV,但是对象中的一些键具有空值。如何只能写入具有非null值的行?

count = 0
for stats in nba_team_stats:
if count == 0:
header = stats.keys()
csv_writer.writerow(header)
count += 1
csv_writer.writerow(stats.values())
data_file.close()

假设您使用的是pythoncsv.DictWriter,下面的示例可以正常工作。你不需要循环就可以做到这一点。

from csv import DictWriter
#Ignore this. This was a test without a file
import io
f = io.StringIO()
f.nam = "t.csv"
nba_team_stats = [{"a": None, "b": 10}, {"b": None, "a": 10}]
csv_writer = DictWriter(f, fieldnames=list(nba_team_stats[0].keys()))
csv_writer.writeheader()
csv_writer.writerows(nba_team_stats)
print(f.getvalue())

输出

a,b
,10
10,

原始python:

import csv
from itertools import chain
it = iter(nba_team_stats)
first_row = next(it, None)
if first_row:
rows = chain((first_row,), it)
with open("results.csv", "w") as f:
writer = csv.writer(f)
# writing keys
writer.writerow(first_row)
# writing content, but:
# ASSUMING EVERY DICT WAS CREATED WITH THE SAME INSERTION ORDER AND PYTHON
# VERSION IS 3.6 OR HIGHER
writer.writerows(
values for values in (row.values() for row in rows) if any(values)
)

以下基于convtools的解决方案是一种替代方案:

from convtools import conversion as c
from convtools.contrib.tables import Table
table = Table.from_rows(nba_team_stats, header=True)
columns = table.columns
table.filter(
c.or_(*(c.col(column) for column in columns), default=False)
).into_csv("results.csv")

相关内容

最新更新