簡體   English   中英

如何在 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:go 對我來說容易,我是初學者

示例 output 到文件:

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

我當前的 Output 到文件:

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 中放置一個“標題”,然后是數據行。

我假設您想多次運行該程序並且“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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM