[英]header in csv file printing every other line
我一直在處理這個問題太久了,請向我解釋為什么標題在我的輸出 csv 中不斷重復。
我有一個包含這些數據的輸入 csv:
該問題需要顛倒姓氏和名字,將名稱分成兩列,並為輸出 csv 創建一個包含 3 列的新標題。 這是我所擁有的:
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)
我的輸出csv:
我試過刪除while循環,取消縮進和縮進,用標題名稱手動寫一行(這會導致錯誤)。 請幫忙。 謝謝!
您可以添加一個變量來保存是否打印了標題,例如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)
看看我如何使用write_header
另一方面,您可以重構代碼以在for
循環之前打開 csv 編寫器,在此處寫入標頭,然后像現在一樣寫入值,而無需每次要寫入一行時都重新打開文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.