[英]header in csv file printing every other line
I've been working this problem way too long, please explain to me why the header keeps repeating in my output csv.我一直在处理这个问题太久了,请向我解释为什么标题在我的输出 csv 中不断重复。
I have an input csv with this data:我有一个包含这些数据的输入 csv:
The problem requires reversing last and first name, separate name into two columns, and make a new header with 3 columns for the output csv.该问题需要颠倒姓氏和名字,将名称分成两列,并为输出 csv 创建一个包含 3 列的新标题。 Here's what I have:
这是我所拥有的:
while True:
try:
# open file
with open(sys.argv[1]) as file:
# make reader
reader = csv.reader(file)
# skip first line (header row)
next(reader)
# for each row
for row in reader:
# identify name
name = row[0]
# split at ,
name = name.split(", ")
# create var last and first, identify var house
last = name[0]
first = name[1]
house = row[1]
# writing the new csv
with open(sys.argv[2], "a") as after:
writer = csv.DictWriter(after, fieldnames=["first", "last", "house"])
# HEADER ONLY NEEDS TO OCCUR ONCE
writer.writeheader()
writer.writerow({"first": first, "last": last, "house": house})
sys.exit(0)
my output csv:我的输出csv:
I've tried removing the while loop, unindenting and indenting, writing a row manually with the header names (which caused errors).我试过删除while循环,取消缩进和缩进,用标题名称手动写一行(这会导致错误)。 Please help.
请帮忙。 Thanks!
谢谢!
You can add a variable that hold whether a header was printed or not, ex write_header
您可以添加一个变量来保存是否打印了标题,例如
write_header
while True:
try:
write_header = True
# open file
with open(sys.argv[1]) as file:
# make reader
reader = csv.reader(file)
# skip first line (header row)
next(reader)
# for each row
for row in reader:
# identify name
name = row[0]
# split at ,
name = name.split(", ")
# create var last and first, identify var house
last = name[0]
first = name[1]
house = row[1]
# writing the new csv
with open(sys.argv[2], "a") as after:
writer = csv.DictWriter(after, fieldnames=["first", "last", "house"])
# HEADER ONLY NEEDS TO OCCUR ONCE
if write_header:
writer.writeheader()
write_header = False
writer.writerow({"first": first, "last": last, "house": house})
sys.exit(0)
See how i used write_header
看看我如何使用
write_header
On an other note, you can refactor your code to open the csv writer before the for
loop, write headers there, then write values as you do now without the need to reopen the file each time you want to write a row另一方面,您可以重构代码以在
for
循环之前打开 csv 编写器,在此处写入标头,然后像现在一样写入值,而无需每次要写入一行时都重新打开文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.