【问题标题】:How to Write Header only once in Python如何在 Python 中只写一次标题
【发布时间】:2021-07-19 19:00:53
【问题描述】:

我对编程非常陌生,如何只编写一次标题但重复其他值我不确定用什么术语来描述这个,所以我会告诉你我的意思:

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

【问题讨论】:

  • 无论何时运行此脚本,它都会覆盖该文件。但是如果它至少已经包含标题(和一些数据),您宁愿不覆盖它?
  • 您只写了列表“toWrite”中的内容,每行只有一个值。这些值是否会随着时间而更新?我目前不确定您的工作流程应该是什么样子。此外,如果您多次运行此脚本,当您再次写入标头时,您总是会覆盖其内容。

标签: python python-3.x append


【解决方案1】:

我假设您想多次运行这个程序并且“toWrite”列表中的值发生变化?

如果是这样,您的问题是您总是执行该部分:

file = open('Test.csv', 'w') 

with file:
    writer = csv.writer(file)

    for row in toWriteHeader:
        writer.writerow(row)

因此,您以覆盖现有内容的模式“w”打开文件。 只需在编写标头之前检查文件是否存在。此外,最好将文件作为上下文管理器(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中定义文件的完整路径,或者先切换到文件所在的目录。

此解决方案假定您第一次运行代码以写入标头时该文件不存在。如果它可能已经存在但可能为空,则可以检查它是否为空: How to check if .xls and .csv files are empty

【讨论】:

    【解决方案2】:

    这样的事情有帮助吗?

    
    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 part.. 但这会在 csv 中放置一个“标题”,然后是数据行。

    【讨论】:

      猜你喜欢
      • 2015-04-04
      • 1970-01-01
      • 2018-12-23
      • 2021-03-11
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多