如何在 Python 中只写一次 Header
How to Write Header only once in Python
我是编程的新手,我怎么能只写一次 header 而重复其他值我不确定用什么术语来描述这个所以我会告诉你我的意思:
toWriteHeader = [
["Timestamp:", "Overall result:","Blank", "Soll-orderno:", "Desired-HW-Version:", "Desired-SF-Version:","Desired-productcode:", "Desired-device-type:", "Scancode:", "Wbm-orderno:", "Wbm-HW-Version:", "Wbm-SF-Version:",
"Wbm-mac-address:","combined-product-code:", "wbm-device-type:"],
]
toWrite = [
[now ,"Blank",d_ordernum,d_hw_version,d_sf_version,pc_praefix,d_dev_typ,scancode_string,ord_nmr,ord_nmr,v,b]
]
file = open('Test.csv', 'w')
with file:
writer = csv.writer(file)
for row in toWriteHeader:
writer.writerow(row)
file = open('Test.csv', 'a')
with file:
writer = csv.writer(file)
for row in toWrite:
writer.writerow(row)
所以基本上“writeToHeader”只需要写入一次,但其他值需要重复附加,但这不会发生我只写一次“toWrite”
谁能提出安迪解决方案或给我举个例子。
PS: 放轻松我是初学者
示例输出到文件:
Timestamp:, Overall result:,Soll-orderno:,Desired-HW-Version:,Desired-SF-Version:,Desired-productcode:,Desired-device-type:,Scancode:,Wbm-orderno:,Wbm-HW-Version:,Wbm-SF-Version:,Wbm-mac-address:,combined-product-code:,wbm-device-type:
2021-04-26 13:32:11,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0
2021-04-26 13:32:32,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0
2021-04-26 13:32:38,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0
2021-04-26 13:33:48,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0
2021-04-26 13:33:55,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0
我当前输出到文件:
Timestamp:, Overall result:,Soll-orderno:,Desired-HW-Version:,Desired-SF-Version:,Desired-productcode:,Desired-device-type:,Scancode:,Wbm-orderno:,Wbm-HW-Version:,Wbm-SF-Version:,Wbm-mac-address:,combined-product-code:,wbm-device-type:
2021-04-26 13:32:11,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0
这样的事情有帮助吗?
import csv
toWriteHeader = [
["Timestamp:", "Overall result:","Blank", "Soll-orderno:", "Desired-HW-Version:", "Desired-SF-Version:","Desired-productcode:", "Desired-device-type:", "Scancode:", "Wbm-orderno:", "Wbm-HW-Version:", "Wbm-SF-Version:",
"Wbm-mac-address:","combined-product-code:", "wbm-device-type:"],
]
toWrite = [
['now' ,"Blank",'d_ordernum','d_hw_version','d_sf_version','pc_praefix','d_dev_typ','scancode_string','ord_nmr','ord_nmr','v','b']
]
with open('Test.csv', 'w') as f:
writer = csv.writer(f)
writer.writerows(toWriteHeader)
for row in range(10):
writer.writerows(toWrite)
您需要将 toWrite
值调整回变量和
for row
部分 .. 但是这会在 csv 中放置一个“header”,然后是数据行。
我假设您想 运行 这个程序几次并且“toWrite”列表中的值发生变化?
如果是这样,你的问题是你总是执行部分:
file = open('Test.csv', 'w')
with file:
writer = csv.writer(file)
for row in toWriteHeader:
writer.writerow(row)
因此您以 'w' 模式打开文件,这会覆盖现有内容。
在写 header 之前检查文件是否存在。此外,最好将文件作为上下文管理器的一部分打开(with),以便之后自动关闭:
import os.path
fname = 'HERE SHOULD BE THE FULL PATH OF THE FILE'
if (not os.path.isfile(fname)):
with open(fname, 'w') as file:
writer = csv.writer(file)
for row in toWriteHeader:
writer.writerow(row)
您必须先在 fname 中定义文件的完整路径,或者先更改为文件的目录。
此解决方案假定您第一次 运行 您的代码编写 header 时该文件不存在。如果它可能已经存在但可能为空,您可以检查它是否为空:
How to check if .xls and .csv files are empty
我是编程的新手,我怎么能只写一次 header 而重复其他值我不确定用什么术语来描述这个所以我会告诉你我的意思:
toWriteHeader = [
["Timestamp:", "Overall result:","Blank", "Soll-orderno:", "Desired-HW-Version:", "Desired-SF-Version:","Desired-productcode:", "Desired-device-type:", "Scancode:", "Wbm-orderno:", "Wbm-HW-Version:", "Wbm-SF-Version:",
"Wbm-mac-address:","combined-product-code:", "wbm-device-type:"],
]
toWrite = [
[now ,"Blank",d_ordernum,d_hw_version,d_sf_version,pc_praefix,d_dev_typ,scancode_string,ord_nmr,ord_nmr,v,b]
]
file = open('Test.csv', 'w')
with file:
writer = csv.writer(file)
for row in toWriteHeader:
writer.writerow(row)
file = open('Test.csv', 'a')
with file:
writer = csv.writer(file)
for row in toWrite:
writer.writerow(row)
所以基本上“writeToHeader”只需要写入一次,但其他值需要重复附加,但这不会发生我只写一次“toWrite”
谁能提出安迪解决方案或给我举个例子。 PS: 放轻松我是初学者
示例输出到文件:
Timestamp:, Overall result:,Soll-orderno:,Desired-HW-Version:,Desired-SF-Version:,Desired-productcode:,Desired-device-type:,Scancode:,Wbm-orderno:,Wbm-HW-Version:,Wbm-SF-Version:,Wbm-mac-address:,combined-product-code:,wbm-device-type:
2021-04-26 13:32:11,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0
2021-04-26 13:32:32,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0
2021-04-26 13:32:38,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0
2021-04-26 13:33:48,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0
2021-04-26 13:33:55,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0
我当前输出到文件:
Timestamp:, Overall result:,Soll-orderno:,Desired-HW-Version:,Desired-SF-Version:,Desired-productcode:,Desired-device-type:,Scancode:,Wbm-orderno:,Wbm-HW-Version:,Wbm-SF-Version:,Wbm-mac-address:,combined-product-code:,wbm-device-type:
2021-04-26 13:32:11,Blank,58184,1.00,1.0.0,7A2F7,TREE M-5TX PN IP67,58183#99AF0M000F9EF41A80,58184,58184,1.00,1.0.0
这样的事情有帮助吗?
import csv
toWriteHeader = [
["Timestamp:", "Overall result:","Blank", "Soll-orderno:", "Desired-HW-Version:", "Desired-SF-Version:","Desired-productcode:", "Desired-device-type:", "Scancode:", "Wbm-orderno:", "Wbm-HW-Version:", "Wbm-SF-Version:",
"Wbm-mac-address:","combined-product-code:", "wbm-device-type:"],
]
toWrite = [
['now' ,"Blank",'d_ordernum','d_hw_version','d_sf_version','pc_praefix','d_dev_typ','scancode_string','ord_nmr','ord_nmr','v','b']
]
with open('Test.csv', 'w') as f:
writer = csv.writer(f)
writer.writerows(toWriteHeader)
for row in range(10):
writer.writerows(toWrite)
您需要将 toWrite
值调整回变量和
for row
部分 .. 但是这会在 csv 中放置一个“header”,然后是数据行。
我假设您想 运行 这个程序几次并且“toWrite”列表中的值发生变化?
如果是这样,你的问题是你总是执行部分:
file = open('Test.csv', 'w')
with file:
writer = csv.writer(file)
for row in toWriteHeader:
writer.writerow(row)
因此您以 'w' 模式打开文件,这会覆盖现有内容。 在写 header 之前检查文件是否存在。此外,最好将文件作为上下文管理器的一部分打开(with),以便之后自动关闭:
import os.path
fname = 'HERE SHOULD BE THE FULL PATH OF THE FILE'
if (not os.path.isfile(fname)):
with open(fname, 'w') as file:
writer = csv.writer(file)
for row in toWriteHeader:
writer.writerow(row)
您必须先在 fname 中定义文件的完整路径,或者先更改为文件的目录。
此解决方案假定您第一次 运行 您的代码编写 header 时该文件不存在。如果它可能已经存在但可能为空,您可以检查它是否为空: How to check if .xls and .csv files are empty